为了账号安全,请及时绑定邮箱和手机立即绑定

Java swing GUI冻结

Java swing GUI冻结

holdtom 2019-11-20 14:27:58
我正在使用套接字编写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个赞

您的设计有两个陷阱:

  1. ss.accept() 是一个阻止呼叫,因此您的用户界面将冻结,直到有传入连接

  2. 切勿while(true)在EDT中运行循环。

而是执行以下操作:

  • 单击该按钮后,创建一个线程,该线程将开始侦听传入的连接。

  • 只要有传入连接,就创建另一个线程,该线程将采用传入客户端连接并进行处理。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 615 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信