0 0

用java做聊天窗口的问题....5

做了一个聊天窗口,可是只要一设置jTextArea的字体就运行不出来啦..请帮忙找找错误...谢谢..
package pack_Chat;

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

import java.awt.Dimension;
import javax.swing.JTextArea;
import java.awt.Rectangle;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.sql.Date;
import java.text.DateFormat;
import java.util.*;
import java.text.* ;
import javax.swing.JButton;
import javax.xml.crypto.Data;
import javax.swing.JLabel;
import java.awt.Color;
import javax.swing.JComboBox;
import java.awt.List;

public class Chat extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JTextArea jTextArea2 = null;
private JButton jButton1 = null;
private JLabel jLabel1 = null;
private JComboBox jComboBox1 = null;
private JLabel jLabel2 = null;
private JComboBox jComboBox2 = null;
private JLabel jLabel3 = null;
private JComboBox jComboBox3 = null;
public Chat() {
super();
initialize();
}
private void initialize() {
this.setSize(375, 364);
this.setContentPane(getJContentPane());
this.setTitle("聊天室");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel3 = new JLabel();
jLabel3.setBounds(new Rectangle(159, 220, 28, 31));
jLabel3.setForeground(new Color(0, 51, 204));
jLabel3.setText("大小");
jLabel2 = new JLabel();
jLabel2.setBounds(new Rectangle(81, 220, 26, 32));
jLabel2.setForeground(new Color(0, 51, 204));
jLabel2.setText("样式");
jLabel1 = new JLabel();
jLabel1.setBounds(new Rectangle(2, 220, 26, 32));
jLabel1.setForeground(new Color(0, 51, 204));
jLabel1.setText("字体");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTextArea2(), null);
jContentPane.add(getJButton1(), null);
jContentPane.add(jLabel1, null);
jContentPane.add(getJComboBox1(), null);
jContentPane.add(jLabel2, null);
jContentPane.add(getJComboBox2(), null);
jContentPane.add(jLabel3, null);
jContentPane.add(getJComboBox3(), null);
jContentPane.add(getJScrollPane1(), null);
}
return jContentPane;
}
private JTextArea getJTextArea2() {
if (jTextArea2 == null) {
jTextArea2 = new JTextArea();
jTextArea2.setBounds(new Rectangle(1, 253, 282, 73));
jTextArea2.setLineWrap(true);
jTextArea2.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent e) {
if(e.getKeyChar()==KeyEvent.VK_ENTER){
String s="你说:"+jTextArea2.getText();
                     String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
                     jTextArea1.append(date+"\n");
                     jTextArea1.append(s); 
                     jTextArea2.setText("");
}
}
});
}
return jTextArea2;
}
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(293, 288, 62, 32));
jButton1.setText("发送");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
                     String s="你说:"+jTextArea2.getText();
                     String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
                     jTextArea1.append(date+"\n");
                     jTextArea1.append(s+"\n");
                     jTextArea2.setText("");
                    
}
});
}
return jButton1;
}
   String str =  "宋体";  //  @jve:decl-index=0:
private JComboBox getJComboBox1() {
if (jComboBox1 == null) {
jComboBox1 = new JComboBox();
jComboBox1.setBounds(new Rectangle(28, 220, 53, 31));
jComboBox1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getItem().toString()=="宋体")
str="宋体";
if(e.getItem().toString()=="隶书")
str="隶书";
if(e.getItem().toString()=="黑体")
str="黑体";
jTextArea2.setFont(new Font(str,ss,DX));
jTextArea1.setFont(new Font(str,ss,DX));//只要加上这句就运行不出来啦(还有两句相同的在设置文字样式和大小那)
}
});
jComboBox1.addItem("宋体");
jComboBox1.addItem("隶书");
jComboBox1.addItem("黑体");
}
return jComboBox1;
}
    int ss=Font.PLAIN;
private JComboBox getJComboBox2() {
if (jComboBox2 == null) {
jComboBox2 = new JComboBox();
jComboBox2.setBounds(new Rectangle(106, 220, 53, 31));
jComboBox2.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getItem().toString()=="默认")
ss=Font.PLAIN;
if(e.getItem().toString()=="粗体")
ss=Font.BOLD;
if(e.getItem().toString()=="斜体")
ss=Font.ITALIC;
jTextArea2.setFont(new Font(str,ss,DX));
jTextArea1.setFont(new Font(str,ss,DX));
}
});
jComboBox2.addItem("默认");
jComboBox2.addItem("粗体");
jComboBox2.addItem("斜体");
}
return jComboBox2;
}
int DX=12;
private JScrollPane jScrollPane1 = null;
private JTextArea jTextArea1 = null;
private JComboBox getJComboBox3() {
if (jComboBox3 == null) {
jComboBox3 = new JComboBox();
jComboBox3.setBounds(new Rectangle(187, 220, 53, 31));
jComboBox3.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getItem().toString()=="12")
DX=12;
if(e.getItem().toString()=="24")
DX=24;
if(e.getItem().toString()=="36")
DX=36;
jTextArea2.setFont(new Font(str,ss,DX));
jTextArea1.setFont(new Font(str,ss,DX));

}
});
jComboBox3.addItem("12");
jComboBox3.addItem("24");
jComboBox3.addItem("36");
}
return jComboBox3;
}

/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
jScrollPane1 = new JScrollPane();
jScrollPane1.setBounds(new Rectangle(0, 0, 360, 220));
jScrollPane1.setViewportView(getJTextArea1());
}
return jScrollPane1;
}
/**
* This method initializes jTextArea1
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea1() {
if (jTextArea1 == null) {
jTextArea1 = new JTextArea();
jTextArea1.setEditable(false);
jTextArea1.setLineWrap(true);
//jTextArea1.setFont(new Font(str,ss,DX));
//jTextArea1.setFont(new Font("宋体",Font.BOLD,40));
}
return jTextArea1;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Chat thisClass=new Chat();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}





下面是错误提示

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at pack_Chat.Chat$3.itemStateChanged(Chat.java:130)
at javax.swing.JComboBox.fireItemStateChanged(Unknown Source)
at javax.swing.JComboBox.selectedItemChanged(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.DefaultComboBoxModel.addElement(Unknown Source)
at javax.swing.JComboBox.addItem(Unknown Source)
at pack_Chat.Chat.getJComboBox1(Chat.java:133)
at pack_Chat.Chat.getJContentPane(Chat.java:69)
at pack_Chat.Chat.initialize(Chat.java:45)
at pack_Chat.Chat.<init>(Chat.java:41)
at pack_Chat.Chat$6.run(Chat.java:220)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
2009年5月23日 19:27

1个答案 按时间排序 按投票排序

0 0

采纳的答案

试了一下,居然找出原因了。
这段代码主要有两个问题:
1.jTextArea1自始至终没有定义,所以有Unknown Source的错误提示,一种简单的解决办法是修改initialize函数如下
private void initialize() {
this.setSize(375, 364);
jTextArea1 = getJTextArea1();
this.setContentPane(getJContentPane());
this.setTitle("聊天室");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
仅仅添加粗体的那行。由于Java默认为定义对象为null,所以调用函数getJTextArea1()进行初始化。
2.第一行package不对头,当可是执行时,JVM会在当前目录下寻找pack_Chat目录下定义的Chat,这时显然是在找不到的,当前目录就是pack_Chat。你可以把第一行删掉。

你可以试一下。

//package pack_Chat;

import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

import java.awt.Dimension;
import javax.swing.JTextArea;
import java.awt.Rectangle;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.sql.Date;
import java.text.DateFormat;
import java.util.*;
import java.text.* ;
import javax.swing.JButton;
import javax.xml.crypto.Data;
import javax.swing.JLabel;
import java.awt.Color;
import javax.swing.JComboBox;
import java.awt.List;

public class iChat extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JTextArea jTextArea2 = null;
private JButton jButton1 = null;
private JLabel jLabel1 = null;
private JComboBox jComboBox1 = null;
private JLabel jLabel2 = null;
private JComboBox jComboBox2 = null;
private JLabel jLabel3 = null;
private JComboBox jComboBox3 = null;
public iChat() {
super();
initialize();
}
private void initialize() {
this.setSize(375, 364);
jTextArea1 = getJTextArea1();
this.setContentPane(getJContentPane());
this.setTitle("聊天室");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel3 = new JLabel();
jLabel3.setBounds(new Rectangle(159, 220, 28, 31));
jLabel3.setForeground(new Color(0, 51, 204));
jLabel3.setText("大小");
jLabel2 = new JLabel();
jLabel2.setBounds(new Rectangle(81, 220, 26, 32));
jLabel2.setForeground(new Color(0, 51, 204));
jLabel2.setText("样式");
jLabel1 = new JLabel();
jLabel1.setBounds(new Rectangle(2, 220, 26, 32));
jLabel1.setForeground(new Color(0, 51, 204));
jLabel1.setText("字体");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTextArea2(), null);
jContentPane.add(getJButton1(), null);
jContentPane.add(jLabel1, null);
jContentPane.add(getJComboBox1(), null);
jContentPane.add(jLabel2, null);
jContentPane.add(getJComboBox2(), null);
jContentPane.add(jLabel3, null);
jContentPane.add(getJComboBox3(), null);
jContentPane.add(getJScrollPane1(), null);
}
return jContentPane;
}
private JTextArea getJTextArea2() {
if (jTextArea2 == null) {
jTextArea2 = new JTextArea();
jTextArea2.setBounds(new Rectangle(1, 253, 282, 73));
jTextArea2.setLineWrap(true);
jTextArea2.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent e) {
if(e.getKeyChar()==KeyEvent.VK_ENTER){
String s="你说:"+jTextArea2.getText();
                     String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
                     jTextArea1.append(date+"\n");
                     jTextArea1.append(s); 
                     jTextArea2.setText("");
}
}
});
}
return jTextArea2;
}
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(293, 288, 62, 32));
jButton1.setText("发送");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
                     String s="你说:"+jTextArea2.getText();
                     String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
                     jTextArea1.append(date+"\n");
                     jTextArea1.append(s+"\n");
                     jTextArea2.setText("");
                    
}
});
}
return jButton1;
}
   String str =  "宋体";  //  @jve:decl-index=0:
private JComboBox getJComboBox1() {
if (jComboBox1 == null) {
jComboBox1 = new JComboBox();
jComboBox1.setBounds(new Rectangle(28, 220, 53, 31));
jComboBox1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getItem().toString()=="宋体")
str="宋体";
if(e.getItem().toString()=="隶书")
str="隶书";
if(e.getItem().toString()=="黑体")
str="黑体";
jTextArea2.setFont(new Font(str,ss,DX));
jTextArea1.setFont(new Font(str,ss,DX));//只要加上这句就运行不出来啦(还有两句相同的在设置文字样式和大小那)
}
});
jComboBox1.addItem("宋体");
jComboBox1.addItem("隶书");
jComboBox1.addItem("黑体");
}
return jComboBox1;
}
    int ss=Font.PLAIN;
private JComboBox getJComboBox2() {
if (jComboBox2 == null) {
jComboBox2 = new JComboBox();
jComboBox2.setBounds(new Rectangle(106, 220, 53, 31));
jComboBox2.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getItem().toString()=="默认")
ss=Font.PLAIN;
if(e.getItem().toString()=="粗体")
ss=Font.BOLD;
if(e.getItem().toString()=="斜体")
ss=Font.ITALIC;
jTextArea2.setFont(new Font(str,ss,DX));
jTextArea1.setFont(new Font(str,ss,DX));
}
});
jComboBox2.addItem("默认");
jComboBox2.addItem("粗体");
jComboBox2.addItem("斜体");
}
return jComboBox2;
}
int DX=12;
private JScrollPane jScrollPane1 = null;
private JTextArea jTextArea1 = null;
private JComboBox getJComboBox3() {
if (jComboBox3 == null) {
jComboBox3 = new JComboBox();
jComboBox3.setBounds(new Rectangle(187, 220, 53, 31));
jComboBox3.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getItem().toString()=="12")
DX=12;
if(e.getItem().toString()=="24")
DX=24;
if(e.getItem().toString()=="36")
DX=36;
jTextArea2.setFont(new Font(str,ss,DX));
jTextArea1.setFont(new Font(str,ss,DX));

}
});
jComboBox3.addItem("12");
jComboBox3.addItem("24");
jComboBox3.addItem("36");
}
return jComboBox3;
}

/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
jScrollPane1 = new JScrollPane();
jScrollPane1.setBounds(new Rectangle(0, 0, 360, 220));
jScrollPane1.setViewportView(getJTextArea1());
}
return jScrollPane1;
}
/**
* This method initializes jTextArea1
*
* @return javax.swing.JTextArea
*/
private JTextArea getJTextArea1() {
if (jTextArea1 == null) {
jTextArea1 = new JTextArea();
jTextArea1.setEditable(false);
jTextArea1.setLineWrap(true);
//jTextArea1.setFont(new Font(str,ss,DX));
//jTextArea1.setFont(new Font("宋体",Font.BOLD,40));
}
return jTextArea1;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
iChat thisClass=new iChat();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}




2009年5月24日 12:11

相关推荐

    java-聊天窗口java-聊天窗口.doc

    【Java聊天窗口实现】 在Java编程中,创建一个聊天窗口涉及到图形用户界面(GUI)的构建,网络通信以及多线程技术。以下是对给定文件中`ChatArea`类的详细解析: 1. **导入的包**: - `java.awt.*`:包含了基本的...

    java 界面聊天室源码.rar

    12. **日志记录**: 为了调试和问题排查,通常会在代码中添加日志记录功能,如使用`java.util.logging`或第三方库如Log4j。 13. **打包与部署**: 项目完成后,可能需要将其打包成JAR文件,或者使用Java Web Start或...

    Java实现两个聊天窗口

    以上就是使用Java实现两个聊天窗口的基本步骤。在实际开发中,还需要考虑其他因素,如界面设计的美观性、用户体验、安全性以及并发连接的管理等。通过练习如"exer15_3"这样的项目,可以帮助你更好地理解和掌握这些...

    Java socket聊天室+窗口抖动

    4. 接收消息:客户端持续监听服务器的反馈,一旦有新消息,显示在聊天窗口上,并可能触发窗口抖动。 5. 退出/离开房间:用户可以离开当前房间,回到主菜单,或者完全退出聊天室。 为了实现这些功能,我们需要设计...

    Java聊天程序源码.zip

    Java聊天程序源码.zip是一个包含Java编程语言实现的聊天应用程序的源代码集合。这个程序提供了丰富的功能,使得用户能够在一个互动的环境中进行实时交流。以下是该聊天程序的关键知识点和技术细节: 1. **网络编程*...

    简单java聊天窗口类1.doc

    《简单Java聊天窗口类设计详解》 在Java编程中,创建一个简单的聊天窗口类是学习GUI(图形用户界面)和网络通信的一个基础实践。本文将深入解析提供的代码,阐述其核心概念和功能。 首先,ChatJFrame类继承自...

    自己用java做的聊天系统

    标题中的“自己用Java做的聊天系统”表明这是一个使用Java编程语言开发的聊天应用程序。聊天系统通常涉及客户端和服务器之间的通信,允许用户通过网络发送和接收消息。Java因其跨平台的特性,成为构建这类系统的常用...

    Java聊天室代码.zip

    在Java聊天室中,Swing可能被用来创建窗口、按钮、文本框等元素,让用户能够输入消息、发送消息、查看聊天记录等。 2. **MySQL数据库**: MySQL是一款开源的关系型数据库管理系统,广泛用于存储和管理大量数据。在这...

    Java源码包100个设计实例.zip

    Java聊天软件Visual Chat v1.91源码.rar Java访问权限控制源代码.rar Java读写文本文件的示例代码 Java赌神游戏网络版源代码.rar Java超市管理,SQL2000+源代码.rar Java超市进销存系统.rar Java软件度量源码.ra

    java打开QQ聊天窗口

    在Java编程语言中,实现打开QQ聊天窗口的功能主要涉及到操作系统交互和进程控制。这个功能的实现通常是通过调用操作系统特定的命令或者API来完成的,因为QQ聊天窗口是QQ客户端程序的一部分,它需要与QQ应用程序进行...

    Java实现获取窗口句柄并操作窗口jna-4.4.0

    Java是一种广泛使用的编程语言,它在许多领域都有应用,包括桌面应用。然而,Java原生并不支持直接操作操作系统级别的资源,如窗口句柄。为了弥补这个不足,开发人员可以使用Java Native Access (JNA),这是一个Java...

    用java 做的局域网QQ. 挺好用!

    6. **图形用户界面(GUI)设计**:使用Java的Swing或JavaFX库来创建用户友好的界面,包括聊天窗口、联系人列表、状态指示等。 7. **文件传输**:如果项目包含了文件传输功能,那么需要学习如何在Java中处理文件I/O...

    Java实时聊天系统 chatting.zip

    Java实时聊天系统是一种基于Java编程语言开发的多用户交互应用程序,它允许用户通过网络进行实时通信。这个系统通常包括客户端和服务器两部分,客户端用于用户的交互界面,而服务器则负责处理客户端之间的通信请求,...

    Java聊天室源代码...

    【Java聊天室源代码】是一个基于Java编程语言开发的在线聊天室项目,它为用户提供了一个交互式的实时交流平台。这个项目不仅包含了完整的源代码,还附带了必要的资源文件,如图片,以及一个预编译的`send.jar`文件,...

    Java简易聊天室.zip

    4. `ClientGUI.java`:客户端的图形用户界面(GUI),可能使用Java Swing或JavaFX库,展示聊天窗口并处理用户输入。 5. `Message.java`:可能包含用于封装聊天消息的类,包括发送者、接收者和消息内容等信息。 这个...

    java网络聊天程序借鉴.pdf

    Java 网络聊天程序设计是指使用 Java 语言开发的网络聊天程序,它允许多个用户在网络上实时交流信息。在本文中,我们将详细介绍 Java 网络聊天程序设计的实现过程,包括服务器端和客户端的设计。 服务器端设计 ...

    archive_PaintChat日本Java画图聊天程序.zip.zip

    【标题】"archive_PaintChat日本Java画图聊天程序.zip.zip" 提供的是一个压缩文件,其中包含了名为 "PaintChat日本Java画图聊天程序.zip" 的应用程序。这是一款基于Java技术开发的在线画图和聊天工具,专为日本用户...

    java简单聊天窗口(服务器及客户端)

    以上知识点构成了一个简单的Java聊天窗口系统的核心组成部分,通过理解并实践这些概念,开发者可以构建出一个基本的、功能完善的网络聊天应用。在实际开发中,还可以考虑添加更多的功能,如用户认证、群聊、文件传输...

    Java_chatsrc_GUI.zip_GUI_Java_chatsrc_GUI.zip_java gui_java聊天软件_

    例如,在聊天软件中,GUI用于展示聊天窗口、接收用户输入、触发事件处理(如按钮点击),而核心业务逻辑则处理网络通信、消息解析和存储等后台任务。通过良好的设计和编程实践,开发者可以构建出用户友好且健壮的...

Global site tag (gtag.js) - Google Analytics