java套接字问题

java套接字问题,java,Java,我正在尝试用java制作一个简单的TCP客户端和主机聊天程序。它们都在简单的GUI中运行。在我启动服务器后,它会等待来自客户端的连接,然后在其JtextArea中打印一条消息。服务器成功地做到了这一点,在这里之前一切都正常运行,现在我向客户端发送了一些数据,它应该打印在它的JtextArea上,但是客户端从建立连接时起就被卡住了,connect按钮一直按下,它只是冻结了 这是客户端连接按钮代码,我想我在这里做错了什么 private void jButton2MouseClicked(jav

我正在尝试用java制作一个简单的TCP客户端和主机聊天程序。它们都在简单的GUI中运行。在我启动服务器后,它会等待来自客户端的连接,然后在其JtextArea中打印一条消息。服务器成功地做到了这一点,在这里之前一切都正常运行,现在我向客户端发送了一些数据,它应该打印在它的JtextArea上,但是客户端从建立连接时起就被卡住了,connect按钮一直按下,它只是冻结了

这是客户端连接按钮代码,我想我在这里做错了什么

  private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {                                      
    serverName = t3.getText();
    serverPort = Integer.parseInt(t4.getText());
    try {

        tb.append("\nconnecting...>\n"+temp);
        connect2Server();
        temp = in.readLine();
        tb.append(temp);

    } catch (IOException ex) {
        tb.append(ex.toString());
        Logger.getLogger(DesktopApplication1View.class.getName()).log(Level.SEVERE, null, ex);
    }

}       

   private void connect2Server() throws IOException{
        try{
         skt = new Socket(serverName,serverPort);
            in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));
        }
        catch(UnknownHostException uh){
            tb.append(uh.toString());
        }
        catch(IOException io){
            tb.append(io.toString());
        }
    }

//vars
BufferedReader in;
Socket skt;

连接按钮保持按下的原因是您正在阻塞绘制线程。看一看。要点是Swing中的所有GUI事件都在绘制线程中发布,如果您想执行任何阻塞任务(即服务器调用)或任何其他长时间运行的进程,则应该将进程分解为单独的任务。所有执行或触发绘制GUI的任务都应该通过绘制线程完成。长时间运行的任务应该在后台线程中完成。Java为这种设计提供了一种结构

当前,您的
jButton2MouseClicked
方法正在绘制线程中运行,在服务器调用完成之前,将不允许您的应用程序继续绘制,包括取消连接按钮的冻结