我有一个在后台计算的swing工作者,同时在JFrame中更新progressBar。
如何让我的主线程等待doInBackground()完成?
我知道我可以把东西放在done()方法中,但我想知道是否有办法让程序实际等待(该线程是正确的)。
类似于模态JDialog的功能。
因此...
SwingWorker a = new SwingWorker();
a.execute
doOtherStuff();
答案 0 :(得分:13)
简短的回答是,是的。
SwingWorker#get
将阻止,直到doInBackground
方法返回。
答案很长,可能不是你想要做的。
如果您从EDT启动SwingWorker
并致电SwingWorker#get
,则会阻止该EDT,阻止其处理任何更新,从而导致您回到原因SwingWorker
1}}。
在这种情况下,您有两个选择。您可以为SwingWorker
提供一个回调界面,一旦done
完成,它就可以从SwingWorker
调用。或者您可以将PropertyChangeListener
附加到SwingWorker
并监控state
值,等待它等于StateValue.Done