我正在尝试创建一个聊天应用程序,由于某种原因,每当我单击该按钮时,在传出消息时都会出现空指针异常。
这里是客户:
public class Person1 extends JFrame{
static String con="";
static JTextArea conversation;
static JButton button;
static JTextField message;
static DataInputStream incoming;
static DataOutputStream outgoing;
static Socket s;
Person1(){
setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE);
JFrame f= new JFrame("Person1");
message=new JTextField();
button=new JButton("Send");
conversation=new JTextArea();
f.setLayout(null);
f.setVisible(true);
f.setSize(800,800);
button.setFocusPainted(false);
button.setBounds(350,650,100,30);
conversation.setBounds(100,100,600,400);
message.setBounds(200,600,400,30);
message.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
conversation.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
conversation.setEditable(false);
f.add(conversation);
f.add(button);
f.add(message);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String str=message.getText();
addText(str);
try {
outgoing.writeUTF(str);
outgoing.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
private static void addText(String msg) {
// TODO Auto-generated method stub
System.out.println(msg);
if(!msg.equals("")) {
con+=msg+"\n";
conversation.setText(con);
}}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new Person1();
}
});
try {
s=new Socket("127.0.0.1",1000);
incoming=new DataInputStream(s.getInputStream());
outgoing=new DataOutputStream(s.getOutputStream());
while(true) {
String msg=incoming.readUTF();
if(!msg.trim().equals(""))
addText(msg);
}
}catch(Exception e) {
}
}
}
这是服务器:
public class Person2 extends JFrame {
static String con="";
static JTextArea conversation;
static JButton button;
static JTextField message;
static DataInputStream incoming;
static DataOutputStream outgoing;
static Socket socket;
static ServerSocket s;
Person2(){
setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE);
JFrame f= new JFrame("Person2");
message=new JTextField();
button=new JButton("Send");
conversation=new JTextArea();
f.setLayout(null);
f.setVisible(true);
f.setSize(800,800);
button.setFocusPainted(false);
button.setBounds(350,650,100,30);
conversation.setBounds(100,100,600,400);
message.setBounds(200,600,400,30);
message.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
conversation.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
conversation.setEditable(false);
f.add(conversation);
f.add(button);
f.add(message);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String str=message.getText();
addText(str);
try {
outgoing.writeUTF(
str);
outgoing.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
private static void addText(String msg) {
// TODO Auto-generated method stub
System.out.println(msg);
if(!msg.equals("")) {
con+=msg+"\n";
conversation.setText(con);
}}
public static void main(String args[]) {
try {
s=new ServerSocket(1000);
socket=s.accept();
incoming=new DataInputStream(socket.getInputStream());
outgoing=new DataOutputStream(socket.getOutputStream());
while(true) {
String msg=incoming.readUTF();
if(!msg.trim().equals(""))
addText(msg);
}
}catch(Exception e) {
}
EventQueue.invokeLater(new Runnable() {
public void run() {
new Person2();
}
});
}
}
这是错误
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Person2$1.actionPerformed(Person2.java:43)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)