我正在使用套接字编写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
提交
取消