Java 聊天应用程序中出现错误

Java 聊天应用程序中出现错误,java,swing,sockets,network-programming,event-dispatch-thread,Java,Swing,Sockets,Network Programming,Event Dispatch Thread,我是java的新手。我尝试创建聊天应用程序,但在运行单个客户端时也出现了一些错误。为什么文本区域和文本字段不显示。我得到的是,这是由于接受函数造成的。当编译器到达接受函数时,应用程序会变得繁忙。i、 e应用程序的屏幕上没有显示任何内容 客户一号代码: 客户端2和客户端相同,只是服务器和客户端的端口不同 客户端2的代码 您的ServerSocket代码在事件调度线程(EDT)上阻塞,等待服务器的响应,因此GUI无法重新绘制自身。您需要在单独的线程上执行该代码,以便EDT可以自由地重新绘制自身并响应

我是java的新手。我尝试创建聊天应用程序,但在运行单个客户端时也出现了一些错误。为什么文本区域和文本字段不显示。我得到的是,这是由于接受函数造成的。当编译器到达接受函数时,应用程序会变得繁忙。i、 e应用程序的屏幕上没有显示任何内容

客户一号代码:

客户端2和客户端相同,只是服务器和客户端的端口不同

客户端2的代码


您的ServerSocket代码在事件调度线程(EDT)上阻塞,等待服务器的响应,因此GUI无法重新绘制自身。您需要在单独的线程上执行该代码,以便EDT可以自由地重新绘制自身并响应用户事件

有关更多信息和示例,请阅读上Swing教程的部分。您可能会发现使用
SwingWorker
是一个简单的解决方案,因为它可以为您管理线程

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.net.*;

public class ChatAppOne{

JFrame jframe;
JTextArea jtextarea;
JTextField jtextfield;
JButton jbutton;

ServerSocket server;
Socket sSocket,cSocket;
InputStream inStream;
ObjectInputStream objInStream;
OutputStream outStream;
ObjectOutputStream objOutStream;


ChatAppOne(){
    jframe=new JFrame();
    jframe.setLayout(new FlowLayout(FlowLayout.LEFT));

    jtextarea=new JTextArea("",28,49);
    jtextarea.setEditable(false);
    jframe.add(new JScrollPane(jtextarea));

    jtextfield=new JTextField();
    jtextfield.setPreferredSize(new Dimension(440,30));
    jframe.add(jtextfield);

    jbutton=new JButton("Send");
    jbutton.setPreferredSize(new Dimension(100,35));
    jframe.add(jbutton);

    jbutton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            try{
                cSocket=new Socket("localhost",1340);
                outStream=cSocket.getOutputStream();
                objOutStream=new ObjectOutputStream(outStream);

                objOutStream.writeObject(jtextfield.getText());
                jtextarea.setText(jtextarea.getText() +" \n " +"Me: " +jtextfield.getText());

                jtextfield.setText("");

                cSocket.close();
                outStream.close();
                objOutStream.close();
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.PLAIN_MESSAGE);
            }
        }
    });

    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jframe.setSize(600,600);
    jframe.setTitle("Chat Application");
    jframe.setVisible(true);

    startServer();
}

void startServer(){
    try{
        server=new ServerSocket(1550);
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.PLAIN_MESSAGE);
    }
    while(true){
        try{
            sSocket=server.accept();

            inStream=sSocket.getInputStream();
            objInStream=new ObjectInputStream(inStream);

            String msg=(String) objInStream.readObject();

            jtextarea.setText("App Two : "+ msg);

            sSocket.close();
            inStream.close();
            objInStream.close();

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.PLAIN_MESSAGE);
        }
    }
}


public static void main(String args[]){
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            new ChatAppOne();
        }
    });
}

}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.net.*;

public class ChatAppTwo{

JFrame jframe;
JTextArea jtextarea;
JTextField jtextfield;
JButton jbutton;

ServerSocket server;
Socket sSocket,cSocket;
InputStream inStream;
ObjectInputStream objInStream;
OutputStream outStream;
ObjectOutputStream objOutStream;


ChatAppTwo(){
    jframe=new JFrame();
    jframe.setLayout(new FlowLayout(FlowLayout.LEFT));

    jtextarea=new JTextArea("",28,49);
    jtextarea.setEditable(false);
    jframe.add(new JScrollPane(jtextarea));

    jtextfield=new JTextField();
    jtextfield.setPreferredSize(new Dimension(440,30));
    jframe.add(jtextfield);

    jbutton=new JButton("Send");
    jbutton.setPreferredSize(new Dimension(100,35));
    jframe.add(jbutton);

    jbutton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            try{
                cSocket=new Socket("localhost",1550);
                outStream=cSocket.getOutputStream();
                objOutStream=new ObjectOutputStream(outStream);

                objOutStream.writeObject(jtextfield.getText());
                jtextarea.setText(jtextarea.getText() +" \n " +"Me: " +jtextfield.getText());

                jtextfield.setText("");

                cSocket.close();
                outStream.close();
                objOutStream.close();
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.PLAIN_MESSAGE);
            }
        }
    });

    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jframe.setSize(600,600);
    jframe.setTitle("Chat Application");
    jframe.setVisible(true);

    startServer();
}

void startServer(){
    try{
        server=new ServerSocket(1340);
        JOptionPane.showMessageDialog(null, "Server Started", "Error", JOptionPane.PLAIN_MESSAGE);
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.PLAIN_MESSAGE);
    }
    while(true){
        try{
            sSocket=server.accept();
            inStream=sSocket.getInputStream();

            objInStream=new ObjectInputStream(inStream);
            String msg=(String) objInStream.readObject();

            jtextarea.setText("App Two : "+ msg);

            sSocket.close();
            inStream.close();
            objInStream.close();

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.PLAIN_MESSAGE);
        }
    }
}


public static void main(String args[]){
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            new ChatAppTwo();
        }
    });
}

}