GUI构建后启动线程

时间:2011-07-13 20:32:05

标签: java multithreading swing user-interface

我有一个在构造函数中构建GUI的程序。我需要一个与EDT分开的线程,在构造有问题的对象后立即运行。有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:2)

  

我需要一个与EDT分开的线程

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

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

答案 1 :(得分:1)

构建您的GUI,在调用的新的Runnable中打开一个新窗口:SwingUtilities.invokeLater

答案 2 :(得分:1)

您要使用的是SwingWorker< T,V>。在doInBackground方法中,打开连接并开始获取数据。如果有足够的数据来更新gui,请调用publish方法。实现process方法以使用publish中的新数据更新gui,最后实现done方法以在完成数据提取时通知用户。

Swing Worker是一个泛型,因此在构建它时,您需要提供两种类型:TVV是在publishprocess方法之间传递的数据的类型,T是由doInBackground返回并传递给done的类型。

答案 3 :(得分:1)

你有两个选择

1)将Thread打包到Runnable中,如演示here

2)我对普通的SwingExecutor不太满意,然后我使用的是Executor和SwingWorker,由PropertyChangeListener监控,例如here

请严格执行Executor启动的线程数。执行程序并不关心SwingWorker是否结束,并且仍然存在Bug,其中很可能在Executor同时实现最大重载(API中的某处)同时作业。

因此可能会实现PropertyChangeListener

相关问题