如何等待SwingWorker完成?

Kar*_*120 8 java swing swingworker

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

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

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

类似于模态JDialog的东西.

所以...

SwingWorker a = new SwingWorker();
a.execute

doOtherStuff();
Run Code Online (Sandbox Code Playgroud)

doOtherStuff仅在doInBackground完成后运行,但不将该方法放在SwingWorker的done()方法中.

Mad*_*mer 13

简短的回答是,是的.

SwingWorker#get将阻塞,直到该doInBackground方法返回.

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

如果你SwingWorker从EDT和电话启动,SwingWorker#get你将阻止EDT,阻止它处理任何更新,导致你回到你正在使用的原因SwingWorker.

在这种情况下,您有两个选择.您可以提供SwingWorker一个回调接口,它可以doneSwingWorker完成后调用.或者你可以附加PropertyChangeListenerSwingWorker和监测state值,等到它等于StateValue.Done