我正在编写一个应用程序,它使用SwingWorker
执行其文件菜单操作。每个调用的方法返回一个值boolean
,该值告诉操作是否成功执行。如何读取SwingWorker的结果*而无需等待?
目前我使用的繁忙等待结果,这样的:
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
中打开对话框不会得到画。
编辑:如果可能,我想避免该方法(或工作人员)异步沟通其结果。我正在执行几个相互依赖的简短方法(文件 - >打开,新建,关闭,保存,另存为,退出)(即当试图退出,退出调用close,close可能调用save,save可能调用save如)。异步解决似乎会使代码变得更加复杂。
您可以随时在循环中放入Thread.sleep(100)。 –
这并不会改变您对结果进行轮询的事实,而不是让对象进行计算来告诉您何时完成。 – mcfinnigan