使用Java Swing GUI,如何在后台运行Server Socket并仍然使用GUI?

Roo*_*kie 1 java swing multithreading event-dispatch-thread

我有一个基本的服务器工作,但我希望能够按下GUI中的按钮来运行所述服务器.

目前,当我按下按钮运行服务器时,按钮保持按下状态,GUI的其余部分无法访问,直到我强制在Netbeans中停止它.我想包括按钮来停止服务器等所以我想知道如何在后台运行服务器代码,同时与GUI交互其他任何东西.

我怎样才能在GUI中实现这一目标?

And*_*son 11

不要阻止EDT(事件调度线程).在a上运行服务器Thread.有关更多详细信息,请参阅Swing中的并发.


在评论中提到,但也参见为服务器和客户端提供Swing GUI的这个(非常)相关示例.

在此输入图像描述

  • 另请参阅此相关[示例](http://stackoverflow.com/a/3245805/230513). (2认同)

meh*_*udi 5

您应该使用Thread类来实现此目的.
在主类中实现runnable接口,然后覆盖run()方法.在run()方法中按下按钮时,请输入您想要的代码.然后在按钮ActionListener中编写以下代码:

new Thread(this).start();
Run Code Online (Sandbox Code Playgroud)

这将在不同的"线程"中执行代码.

  • 我认为你的建议有一些缺点,因为它会减少阶级凝聚力并增加耦合.GUI类也不应该是Runnable类,因为套接字代码应该在一个单独的类中,并且应该完全不了解所有GUI代码.最好使用SwingWorker而不是普通的Thread,因为SwingWorker具有允许与Thread没有的Swing线程进行交互和通信的工具. (3认同)