riw*_*iwi 6 java swing swingworker
我正在编写一个使用执行文件菜单操作的应用程序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;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一种较少投票的方式来解决这个问题?
worker.get()直接使用不起作用,因为它阻止了EDT,等待任务完成 - 这意味着即使我在内部打开的对话框SwingWorker也不会被绘制.
编辑:如果可能的话,我想避免方法(或工人)异步地传达他们的结果.我正在实现几个相互依赖的简短方法(文件 - >打开,新建,关闭,保存,另存为,退出)(即当试图退出,退出呼叫关闭,关闭可能会调用保存,保存可能会调用保存如).异步解决这个问题似乎使代码变得更加复杂.
SwingWorker的目的正是在后台启动一些任务,而不是阻止EDT.要么你想要同步的东西,要么你想要阻止EDT,或者想要异步的东西,后台任务应该使用publishSwingWorker 的方法更新它的状态.
您可以在任务运行时显示带有进度条的阻止模式对话框,并在任务完成后隐藏它.
另一种方法是阻塞一段时间,希望任务快速完成,然后备份到异步方式.这可以使用get以超时为参数的方法来完成.
| 归档时间: |
|
| 查看次数: |
5710 次 |
| 最近记录: |