【问题标题】:Java GUI FreezesJava GUI 冻结
【发布时间】:2015-05-09 13:17:46
【问题描述】:

我正在尝试创建一个简单的 TCP 客户端服务器应用程序接口 用户可以在按下相应按钮时启动或停止服务器 当用户按下它应该连接到服务器的按钮时,我创建了一个 StartServer 按钮 我面临的问题是当用户单击按钮时注意到发生并且界面停止

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    DefaultListModel dlm=new DefaultListModel();
    String clientSentence; 
    String capitalizedSentence;
    try {
        welcomeSocket= new ServerSocket(6789);
        dlm.addElement("server started..");            
        dlm.addElement("Server Waiting for Connections on Port 6789");
        jList1.setModel(dlm); 
        displayfull();
         while(true)
        {                
        DataOutputStream outToClient = null;
        try {


            Socket connectionSocket = welcomeSocket.accept();
            //dlm.addElement("Client Connected ");
            BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
            //dlm.addElement("Obtained a handle on Client Input Stream");
            outToClient = new DataOutputStream(connectionSocket.getOutputStream());
            //dlm.addElement("Obtained a handle on Client Output Stream");
            clientSentence = inFromClient.readLine();
            //dlm.addElement("Received: " + clientSentence);
            capitalizedSentence = clientSentence.toUpperCase() + '\n';
            outToClient.writeBytes(capitalizedSentence);
            //dlm.addElement("Message Sent");
        } catch (Exception e) {

        } 

    }               

    } catch (Exception e) {
        dlm.addElement(e);
    }
   jList1.setModel(dlm); 
    displayfull();
}   

【问题讨论】:

  • 你有一个无限的while循环,该方法永远不会返回,因此接口永远等待。
  • 你阻塞了事件调度线程
  • 有没有其他方法来实现它。我已经通过创建一个单独的线程进行了尝试,但循环仍然存在同样的问题

标签: java user-interface freeze


【解决方案1】:

正如其他人所暗示的那样,您在Event Dispatch Thread 上花费了宝贵的时间。
如果您阅读有关如何操作 Concurrency in Swing 的教程,您会发现您获得了像 Swing worker 这样的工具。

Stack Overflow 上有很多这样的问题,有些比其他问题更有帮助。

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2013-01-16
    • 2020-08-06
    • 2015-04-08
    相关资源
    最近更新 更多