Java GUI构建后启动线程

Java GUI构建后启动线程,java,multithreading,swing,user-interface,Java,Multithreading,Swing,User Interface,我有一个在构造函数中构建GUI的程序。我需要一个独立于EDT的线程,以便在构建相关对象后立即运行。有人能给我指出正确的方向吗?构建GUI在调用的新Runnable中打开新窗口:构建GUI在调用的新Runnable中打开新窗口: 我需要一个独立于EDT的线程 线程与EDT是分开的,所以您所要做的就是创建一个Runnable,然后启动它 您只需担心线程是否会更新任何GUI组件。如果是这种情况,那么您可能需要使用SwingWorker。有关更多信息,请阅读上的Swing教程部分 我需要一个独立于EDT

我有一个在构造函数中构建GUI的程序。我需要一个独立于EDT的线程,以便在构建相关对象后立即运行。有人能给我指出正确的方向吗?

构建GUI在调用的新Runnable中打开新窗口:

构建GUI在调用的新Runnable中打开新窗口:

我需要一个独立于EDT的线程

线程与EDT是分开的,所以您所要做的就是创建一个Runnable,然后启动它

您只需担心线程是否会更新任何GUI组件。如果是这种情况,那么您可能需要使用SwingWorker。有关更多信息,请阅读上的Swing教程部分

我需要一个独立于EDT的线程

线程与EDT是分开的,所以您所要做的就是创建一个Runnable,然后启动它

您只需担心线程是否会更新任何GUI组件。如果是这种情况,那么您可能需要使用SwingWorker。有关更多信息,请阅读上的Swing教程部分。

您想要使用的是一个。在
doInBackground
方法中,打开连接并开始提取数据。当您有足够的数据更新gui时,调用
publish
方法。实现
过程
方法,使用
发布
中的新数据更新gui,最后,实现
完成
方法,在完成数据提取时通知用户

Swing Worker是一种泛型,因此在构建它时需要提供两种类型:
T
V
V
是在
publish
process
方法之间传递的数据类型,
T
doInBackground
返回并传递到
done
的类型,您要使用的是一个。在
doInBackground
方法中,打开连接并开始提取数据。当您有足够的数据更新gui时,调用
publish
方法。实现
过程
方法,使用
发布
中的新数据更新gui,最后,实现
完成
方法,在完成数据提取时通知用户

Swing Worker是一种泛型,因此在构建它时需要提供两种类型:
T
V
V
是在
publish
process
方法之间传递的数据类型,
T
doInBackground
返回并传递到
done
的类型。您有两种选择

1) 如图所示,将线程包装为可运行

2) 我对普通SwingExecutor不是很满意,然后我用它作为执行者和SwingWorker,由PropertyChangeListener监控,例如

请携带由执行器启动的线程数。Executor不关心SwingWorker是否结束,并且仍然存在着很可能使Executor同时执行的最大并发作业(API中的某个地方)过载的地方

因此,是否有可能实现PropertyChangeListener

您有两种选择

1) 如图所示,将线程包装为可运行

2) 我对普通SwingExecutor不是很满意,然后我用它作为执行者和SwingWorker,由PropertyChangeListener监控,例如

请携带由执行器启动的线程数。Executor不关心SwingWorker是否结束,并且仍然存在着很可能使Executor同时执行的最大并发作业(API中的某个地方)过载的地方


由于这个原因,是否有可能通过“紧随其后”实现PropertyChangeListener

,您的意思是这个过程应该是连续的吗?您希望线程如何与GUI交互?或者它是独立的?它需要修改JTable中的数据。所讨论的线程通过非常慢的协议打开网络连接,因此GUI需要显示,然后线程需要按顺序修改条目作为来自网络的数据流。从本质上说:这个过程应该是连续的。你说的“紧跟其后”是指这个过程应该是连续的吗?你希望线程如何与GUI交互?或者它是独立的?它需要修改JTable中的数据。所讨论的线程通过非常慢的协议打开网络连接,因此GUI需要显示,然后线程需要按顺序修改条目作为来自网络的数据流。从本质上讲,这个过程应该是循序渐进的。