我有一个 swing worker 在后台计算,同时更新 JFrame 中的 progressBar。
如何让我的主线程等待 doInBackground () 完成?
我知道我可以把东西放在 done() 方法中,但我想知道是否有办法真正让程序等待(那个线程,是正确的)。
类似于模态 JDialog 的功能。
所以...
SwingWorker a = new SwingWorker();
a.execute
doOtherStuff();
doOtherStuff 仅在 doInBackground 完成后运行,但不会将该方法放入 SwingWorker 的 done() 方法中。
最佳答案
简短的回答是,是的。
SwingWorker#get
将阻塞,直到 doInBackground
方法返回。
长答案是,可能不是您想做的。
如果您从 EDT 启动 SwingWorker
并调用 SwingWorker#get
,您将阻止 EDT,阻止它处理任何导致您返回到您使用 SwingWorker
的原因。
在这种情况下,您有两种选择。您可以为 SwingWorker
提供回调接口(interface),一旦 SwingWorker
完成,它将能够从 done
调用该接口(interface)。或者您可以将 PropertyChangeListener
附加到 SwingWorker
并监控 state
值,等待它等于 StateValue.Done
关于java - 如何等到 SwingWorker 完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845759/