9

我有一个在后台计算的摇摆工作者,同时更新 JFrame 中的进度条。

如何让我的主线程等待 doInBackground () 完成?

我知道我可以把事情放在 done() 方法中,但我想知道是否有办法让程序真正等待(那个线程,是正确的)。

类似于模态 JDialog 所做的事情。

所以...

SwingWorker a = new SwingWorker();
a.execute

doOtherStuff();

doOtherStuff 仅在 doInBackground 完成后运行,但不将所述方法放入 SwingWorker 的 done() 方法中。

4

1 回答 1

17

简短的回答是,是的。

SwingWorker#get将阻塞直到doInBackground方法返回。

长答案是,可能不是您想要做的。

如果您SwingWorker从 EDT 启动并调用SwingWorker#get,您将阻止 EDT,阻止它处理任何更新,这会导致您回到使用SwingWorker.

在这种情况下,您有两个选择。您可以提供一个回调接口,一旦完成SwingWorker就可以调用它。或者您可以将 a 附加到并监视该值,等到它等于doneSwingWorkerPropertyChangeListenerSwingWorkerstateStateValue.Done

于 2013-02-13T03:18:19.843 回答