使用JavaSwingGUI,如何在后台运行服务器套接字并仍然使用GUI?

使用JavaSwingGUI,如何在后台运行服务器套接字并仍然使用GUI?,java,multithreading,swing,event-dispatch-thread,Java,Multithreading,Swing,Event Dispatch Thread,我有一个基本的服务器工作,但我想能够按下一个按钮在图形用户界面上运行说的服务器 目前,当我按下按钮运行服务器时,按钮保持按下状态,GUI的其余部分无法访问,直到我在Netbeans中强制停止它。我想包括停止服务器的按钮等,所以我想知道如何在后台运行服务器代码,同时与GUI进行任何其他交互 如何在GUI中实现这一点 不要阻止EDT事件调度线程。在线程上运行服务器。有关更多详细信息,请参阅 在评论中提到,但也看到了这一点非常相关 不要阻止EDT事件分派线程。在线程上运行服务器。有关更多详细信息,请参

我有一个基本的服务器工作,但我想能够按下一个按钮在图形用户界面上运行说的服务器

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


如何在GUI中实现这一点

不要阻止EDT事件调度线程。在线程上运行服务器。有关更多详细信息,请参阅

在评论中提到,但也看到了这一点非常相关


不要阻止EDT事件分派线程。在线程上运行服务器。有关更多详细信息,请参阅

在评论中提到,但也看到了这一点非常相关


为此,您应该使用Thread类。在主类中实现runnable接口,然后重写run方法。在运行方法中按下按钮时,输入您希望执行的代码。然后在按钮ActionListener中编写以下代码:

new Thread(this).start();

这将在不同的“线程”中执行代码。

为此,您应该使用thread类。在主类中实现runnable接口,然后重写run方法。在运行方法中按下按钮时,输入您希望执行的代码。然后在按钮ActionListener中编写以下代码:

new Thread(this).start();

这将在不同的“线程”中执行代码。

请编辑您的问题,至少提供一些代码详细信息。否则我们将猜测基本服务器是什么。@Andrew EDT==事件调度线程?@Hovercraft我决定将该评论升级为答案,因为这几乎肯定是问题所在。@Gray第一次说对了。每个Swing程序员都应该熟悉它,以及它对编程的意义。当然可以@Andrew。我总是为后人回答和评论,尽量长篇大论。干杯。请编辑您的问题,至少提供一些代码详细信息。否则我们将猜测基本服务器是什么。@Andrew EDT==事件调度线程?@Hovercraft我决定将该评论升级为答案,因为这几乎肯定是问题所在。@Gray第一次说对了。每个Swing程序员都应该熟悉它,以及它对编程的意义。当然可以@Andrew。我总是为后人回答和评论,尽量长篇大论。干杯。我认为你的建议有一些缺点,因为它降低了班级凝聚力,增加了耦合。GUI类也不应该是可运行类,因为套接字代码应该在一个单独的类中,并且应该完全不知道所有GUI代码。使用SwingWorker比普通线程更好,因为SwingWorker有一些工具可以与线程所没有的Swing线程进行交互和通信;在更大的规模和更大的项目中,是的,你是对的。这不是一个好的解决方案!我的观点是,我认为这是OP的问题,我建议编辑关于EDT的真实答案,最好删除我认为你的建议有一些缺点,因为它降低了类的内聚性,增加了耦合。GUI类也不应该是可运行类,因为套接字代码应该在一个单独的类中,并且应该完全不知道所有GUI代码。使用SwingWorker比普通线程更好,因为SwingWorker有一些工具可以与线程所没有的Swing线程进行交互和通信;在更大的规模和更大的项目中,是的,你是对的。这不是一个好的解决方案!我的观点是,我认为这是OP的问题,我建议编辑关于EDT的真实答案,最好将其删除