Java 如何处理两个不同的事件

Java 如何处理两个不同的事件,java,swing,chat,Java,Swing,Chat,我正在制作一个简单的聊天GUI,我已经编写了服务器和GUI客户端,我可以从客户端GUI向服务器发送消息 我的问题是从帧上的服务器接收消息。 当我使用无限循环时,帧被锁定。我不知道该如何分割该对象,以便在JTextArea上显示任何消息。 我的问题是: 是否有任何方法可以拆分帧来处理来自服务器的“发送”和“接收”信息 我的GUI由JTextField、JTextArea和JButton组成 按下JButton时,JTextField中的文本通过以下方式发送到服务器: String u = jTex

我正在制作一个简单的聊天GUI,我已经编写了服务器和GUI客户端,我可以从客户端GUI向服务器发送消息

我的问题是从帧上的服务器接收消息。 当我使用无限循环时,帧被锁定。我不知道该如何分割该对象,以便在
JTextArea
上显示任何消息。 我的问题是: 是否有任何方法可以拆分帧来处理来自服务器的“发送”和“接收”信息

我的GUI由
JTextField
JTextArea
JButton
组成

按下
JButton
时,
JTextField
中的文本通过以下方式发送到服务器:

String u = jTextField.getText(); 
out.writeUTF(u);
但我不知道我该怎么做才能获得
JTextArea

msg = in.readUTF();
jta.append(msg + "\n");
//

线程是否应该是GUI类中的类或组件,因为我已使thread evrything看起来正常工作,但不能在
jTextField
上运行。我在同一个文件中创建了与服务器中相同的线程,但不起作用:

    class bacgroundTask extends Thread{
static String msg;
static JTextArea jta;
static DataInputStream in;
public void run(){
        while(true){
            try{
            msg = in.readUTF();
            jta.append(msg + "\n");
            }
            catch(IOException ioe){}}}}
//

嗨,又是我,我尝试使用invokelater方法,但执行帧frezze时,我无法点击send按钮或在
jtextfield
中键入文本。有谁能给我解释一下他们的方法吗?他们对我的情况正确吗

我已经试过了,不管是带还是不带

       SwingUtilities.invokeLater(
        new Runnable(){
            public void run(){
                while(true){
                try{
                    msg = in.readUTF();
                    jta.append(msg + "\n");
                    jta.revalidate();
                }
                catch(IOException ioe){

                }}}});

您需要在后台线程上运行无限接收循环。

您不应该在后台线程中更新GUI组件。尝试使用SwingUtilities.invokeLater,不要忘记在文本区域中使用类似revalidate()的内容