2011-07-13 23 views
0

我有一个程序在构造函数中构建GUI。我需要一个与EDT分开的线程,在构造完成的对象之后立即运行。任何人都可以将我指向正确的方向吗?GUI构建后启动线程

+1

“紧随其后”,你的意思是这个过程应该是顺序? – mre

+1

你想如何让线程与GUI交互?还是独立? – Jonas

+0

它需要修改JTable中的数据。有问题的线程通过_very_ slow协议打开网络连接,因此需要显示GUI,然后线程需要按照来自网络的数据流顺序修改条目。所以在本质上:过程应该是顺序的。 – SirensOfTitan

回答

1

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

Swing Worker是一个通用的,所以当你构建它时,你需要提供两种类型:TVVpublishprocess方法之间传递的数据的类型,而TdoInBackground返回的类型并传递到done

2

我需要一个线程从EDT分离

线程是从美国东部时间分开所以你do是创建一个Runnable然后启动它。

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

1

你有两个,选项

1)包装主题为可执行的,证明here

2)我不是很用普通SwingExecutor满足,然后我用的是执行人及SwingWorker类的,通过的PropertyChangeListener,例如监控here

请谨慎使用由Executor启动的线程数。 Executor并不在乎SwingWorker是否结束,并且仍然存在Bug哪里可能超过最大值(API中的某处)在同一时间内由Executor同时运行同时作业。

由于这个原因,有可能实现PropertyChangeListener