Concurrency JavaFX8对话框和并发

Concurrency JavaFX8对话框和并发,concurrency,task,javafx-8,Concurrency,Task,Javafx 8,我想向用户显示自定义JavaFX 8对话框,从用户捕获数据,然后在数据保存到数据库后关闭对话框(或显示错误消息\警报) 此时,该对话框显示以下代码: Optional<MyType> result = dialog.showAndWait(); 从阅读文档来看,我似乎应该执行此存储库。是否在后台任务中保存 看起来此代码只能在showAndWait()之后执行并且无法关闭标准对话框,因为这需要在JavaFX应用程序线程上完成 是否只有在后台任务中数据库保存成功时,才能显示对话框、保存

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

此时,该对话框显示以下代码:

Optional<MyType> result = dialog.showAndWait();
从阅读文档来看,我似乎应该执行此存储库。是否在后台任务中保存

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

是否只有在后台任务中数据库保存成功时,才能显示对话框、保存数据,然后显示确认对话框

从阅读文档来看,我似乎应该执行此存储库。是否在后台任务中保存

是的,这是正确的,因为数据库查询需要时间,我们不希望在执行数据库查询时应用程序没有响应。在后台线程上运行任务可以避免这种情况

如果数据库保存在后台任务上成功,是否有方法仅关闭对话框并显示确认对话框

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

// 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
    }
});
关于使用线程和数据库,有一个非常好的答案,我强烈建议您仔细阅读:


链接的正确答案+1。
// 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
    }
});
// On fail
// Using Lambda
runFactoryTask.setOnFailed( t -> {
    // Update 
});