java - 如何等到 SwingWorker 完成?

标签 java swing swingworker

我有一个 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/

相关文章:

java - 程序无法正确计算概率

java - 如何从命令行使用 gradle 运行测试套件

java - 在 Java 中按引用传递与按值传递

java - 将 JButton 覆盖到 JFrame 中,并在其内容 Pane 中使用 JTabbedPane?

java - 如何在 JTextField 中删除文本?

java - "Internal error: couldn' t 创建组件对等”

java - Swing:无法让 JButton 更新 - repaint() 不工作

java - SwingWorker 抛出异常

java - 使用计时器启动 SwingWorker?

java - 是否需要转义 Accept header ?