我正在使用套接字编写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方法内部存在无限循环。我该如何避免呢?
                    
                    
                3 回答
 
                    
                    
                            慕森王
                            
                                
                            
                        
                        
                                                
                    TA贡献1777条经验 获得超3个赞
您的设计有两个陷阱:
- ss.accept()是一个阻止呼叫,因此您的用户界面将冻结,直到有传入连接
- 切勿 - while(true)在EDT中运行循环。
而是执行以下操作:
- 单击该按钮后,创建一个线程,该线程将开始侦听传入的连接。 
- 只要有传入连接,就创建另一个线程,该线程将采用传入客户端连接并进行处理。 
添加回答
举报
0/150
	提交
		取消
	