在GUI构建后启动线程



我有一个在构造函数中构建GUI的程序。我需要一个与EDT分开的线程,以便在构造对象之后立即运行。谁能给我指个正确的方向?

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

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

你只需要担心线程是否更新任何GUI组件。如果是这种情况,那么你可能需要使用SwingWorker。要了解更多信息,请阅读Swing教程中的并发部分。

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

Swing Worker是一个泛型,所以当你构造它时,你需要提供两个类型:TVVpublishprocess方法之间传递的数据类型,TdoInBackground返回并传递给done的数据类型。

构建您的GUI并在一个新的Runnable中打开一个新窗口,该Runnable由:swingutility . invokelater调用

你有两个选择

1)将线程包装成可运行的

2)我对普通的SwingExecutor不太满意,然后我使用该Executor和SwingWorker,由PropertyChangeListener监视,例如这里的

请注意Executor启动的线程数。Executor并不关心SwingWorker是否结束,但仍然存在一个Bug,它很有可能使Executor在同一时间内最大限度地(在API的某个地方)同时运行的任务过载。

因此有可能实现PropertyChangeListener

相关内容

  • 没有找到相关文章

最新更新