如何等待SwingWorker完成?

时间:2013-02-13 03:06:11

标签: java swing swingworker

我有一个在后台计算的swing工作者,同时在JFrame中更新progressBar。

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

我知道我可以把东西放在done()方法中,但我想知道是否有办法让程序实际等待(该线程是正确的)。

类似于模态JDialog的功能。

因此...

SwingWorker a = new SwingWorker();
a.execute

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

1 个答案:

答案 0 :(得分:13)

简短的回答是,是的。

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

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

如果您从EDT启动SwingWorker并致电SwingWorker#get,则会阻止该EDT,阻止其处理任何更新,从而导致您回到原因SwingWorker 1}}。

在这种情况下,您有两个选择。您可以为SwingWorker提供一个回调界面,一旦done完成,它就可以从SwingWorker调用。或者您可以将PropertyChangeListener附加到SwingWorker并监控state值,等待它等于StateValue.Done