猿问

Java swing GUI冻结

我正在使用套接字编写Java客户端/服务器GUI应用程序,这是问题所在:


我有一个按钮开始监听指定的端口:


按钮操作执行的方法


private void listenButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             

    int port = Integer.parseInt(portTextfield.getText(), 10);


    try {

        socket.listen(port);

    } catch (IOException ex) {

    }

}

这是socket.listen方法


public static void listen() throws IOException {

    ServerSocket ss = new ServerSocket(port);


    while (true)

        new socket(ss.accept());

}

“套接字”类扩展了“线程”,

因此在ss.accept()返回值之后,它将在单独的线程中创建新的套接字实例。


单击按钮后,GUI冻结,因为在socket.listen方法内部存在无限循环。我该如何避免呢?


holdtom
浏览 654回答 3
3回答

慕森王

您的设计有两个陷阱:ss.accept() 是一个阻止呼叫,因此您的用户界面将冻结,直到有传入连接切勿while(true)在EDT中运行循环。而是执行以下操作:单击该按钮后,创建一个线程,该线程将开始侦听传入的连接。只要有传入连接,就创建另一个线程,该线程将采用传入客户端连接并进行处理。
随时随地看视频慕课网APP

相关分类

Java
我要回答