gpt4 book ai didi

java - 如何在*没有*忙等待的情况下读取 SwingWorker 的结果?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:43:58 24 4
gpt4 key购买 nike

我正在编写一个使用 SwingWorker 执行其文件菜单操作的应用程序.每个被调用的方法都会返回一个 boolean表明操作是否成功执行的值。

目前我正在忙着等待结果,像这样:

public boolean executeOperation() {
final SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
// ..

if (aborted) {
return false;
}

// ..

return true;
}
};

worker.execute();

// busy wait
while (!worker.isDone())
;

try {
return worker.get().booleanValue();
} catch (Exception e) {
// handle exceptions ..
return false;
}
}

是否有解决此问题的轮询强度较低的方法?

使用 worker.get()直接是行不通的,因为它会阻塞 EDT,等待任务完成——这意味着即使是我从 SwingWorker 中打开的对话框不会被绘制(paint)。

编辑:如果可能的话,我想避免使用异步传递结果的方法(或工作人员)。我正在实现几个相互依赖的短方法(文件 ->打开,新建,关闭,保存,另存为,退出)(即当试图退出时,退出调用关闭,关闭可能调用保存,保存可能调用保存作为)。异步解决这个问题似乎会使代码复杂得多。

最佳答案

SwingWorker 的重点恰恰是在后台启动一些任务并且不阻塞 EDT。要么你想要一些同步的东西,无论你尝试什么,EDT 都会被阻止,或者你想要一些异步的东西,后台任务应该使用 SwingWorker 的 publish 方法更新它的状态。

您可以在任务运行时显示带有进度条的阻塞模式对话框,并在任务完成后将其隐藏。

另一种方法是阻塞一段时间,希望任务能够快速完成,然后备份到异步方式。这可以使用 get method taking a timeout 来完成作为参数。

关于java - 如何在*没有*忙等待的情况下读取 SwingWorker 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7345521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com