小编Dus*_*tin的帖子

JavaFX8 中的任务链:在 onSucceeded 完成上一个任务后启动下一个任务

我对 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,但这不是很灵活,因为我想确保该任务仅导出(无需后续导入)...

concurrency javafx-8

2
推荐指数
1
解决办法
831
查看次数

标签 统计

concurrency ×1

javafx-8 ×1