【问题标题】:javafx 8 dialog and concurrencyjavafx 8 对话框和并发
【发布时间】:2015-11-11 19:11:40
【问题描述】:

我想向用户显示一个自定义 JavaFX 8 对话框,从用户那里捕获数据,然后在数据保存到数据库后关闭对话框(或显示错误消息\警报)。

目前,对话框显示如下代码:

Optional<MyType> result = dialog.showAndWait();

后跟代码:

myrepository.save(result)

通过阅读文档,看起来我应该在后台任务中执行这个 repository.save?

看起来这段代码只能在showAndWait(); 之后执行,并且无法关闭标准对话框,因为这需要在 JavaFX 应用程序线程上完成?

有没有办法只显示对话框,保存数据,然后只有在后台任务上数据库保存成功时才显示确认对话框?

【问题讨论】:

    标签: concurrency task javafx-8


    【解决方案1】:

    从阅读文档看来,我应该在后台任务中执行此 repository.save 吗?

    是的,这是正确的,因为数据库查询需要时间,而且我们不希望我们的应用程序在执行数据库查询时变得无响应。在后台线程上运行任务可以避免它。

    如果数据库保存在后台任务上成功,有没有办法只关闭对话框并显示确认对话框?

    您可以使用任务的succeeded 属性关闭上一个对话框并打开一个新对话框。

    // If database query is successful
    task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
        @Override
        public void handle(WorkerStateEvent t) {
            // Code to close the previous dialog
            //Show confirmation dialog
        }
    });
    

    同样,如果任务失败,您可以使用failed 属性更新对话框或显示新对话框。

    // On fail
    // Using Lambda
    runFactoryTask.setOnFailed( t -> {
        // Update 
    });
    

    James_D 有一个关于使用线程和数据库的非常好的答案,我强烈建议您仔细阅读:

    【讨论】:

    • 链接的好答案+1。
    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多