我对 JavaFX8 相当陌生,面临以下问题。在我当前用于文档处理/编辑的应用程序中,我有两个相当昂贵的任务。打开文档并保存文档。
我的应用程序有“导入下一个”、“导出当前”和“导出当前并导入下一个”按钮。对于导入和导出,我有两个结构如下的任务:
private class Export extends Task<Void> {
public Export() {
this.setOnRunning(event -> {
// do stuff (change cursor etc)
});
this.setOnFailed(event -> {
// do stuff, eg. show error box
});
this.setOnSucceeded(event -> {
// do stuff
});
}
@Override
protected Void call() throws Exception {
// do expensive stuff
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用 提交任务Executors.newSingleThreadExecutor();。
对于“导出当前并导入下一个”功能,我的目标是将导出和导入任务提交给执行器,但我的导入任务仅应在导出任务成功并且给出的事件处理程序setOnSucceedded(在 GUI 上运行)的情况下运行线程)完成。如果导出失败,则加载下一个文档没有任何意义,因为需要用户交互。如何才能实现这一目标?
首先,我厌倦了该call方法中的整个逻辑/错误处理,但这不起作用,因为我无法从此方法更改 GUI(即显示错误框)。
作为解决方法,我在导出任务的最后一行手动提交导入任务setOnSucceeded,但这不是很灵活,因为我想确保该任务仅导出(无需后续导入)...