Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在后台任务javaFX中的捕获异常对话框中显示错误消息?_Java_User Interface_Javafx_Exception Handling_Javafx 8 - Fatal编程技术网

如何在后台任务javaFX中的捕获异常对话框中显示错误消息?

如何在后台任务javaFX中的捕获异常对话框中显示错误消息?,java,user-interface,javafx,exception-handling,javafx-8,Java,User Interface,Javafx,Exception Handling,Javafx 8,我正在使用windows之间的用户交互构建javaFX用户界面,我遇到了一个我在任何地方都找不到解决方案的问题 所以基本上我想打开一个对话框,里面有用户可以填写的输入,一旦应用程序完成了,用这些信息启动一个后台任务,任务运行时会出现另一个对话框(加载屏幕)。但是任务期间可能会发生错误,并且可以捕获异常,如果出现,我希望在另一个对话框中为用户显示异常消息 因此,首先,我有输入对话框: 无论任务是否失败或成功,在任务完成之前,ProgressDialog都会一直显示,一切正常。我可以在控制台中显示异

我正在使用windows之间的用户交互构建javaFX用户界面,我遇到了一个我在任何地方都找不到解决方案的问题

所以基本上我想打开一个对话框,里面有用户可以填写的输入,一旦应用程序完成了,用这些信息启动一个后台任务,任务运行时会出现另一个对话框(加载屏幕)。但是任务期间可能会发生错误,并且可以捕获异常,如果出现,我希望在另一个对话框中为用户显示异常消息

因此,首先,我有输入对话框:

无论任务是否失败或成功,在任务完成之前,ProgressDialog都会一直显示,一切正常。我可以在控制台中显示异常已被捕获,但在捕获中创建的对话框从未显示

我尝试了不同的方法,比如:

task.setOnFailed(e -> {
    system.out.println(task.getException().getMessage()); // Nothing
});
我还尝试在任务本身中添加状态或异常

} catch (Exception e) {
    system.out.println("Exception caught in task !");
    failed();
    setException(e);
}
但我似乎什么都没发生。。。我甚至获得了一个成功状态,捕获了异常,搜索task.getException()时得到了一个nullPointerException(在结果中调用task.ifPresent{…)


我对多线程非常在行……我错过了什么吗?如果有任何帮助,我们将不胜感激,谢谢:)

尝试在内部显示它

尝试在内部显示它

如果您正确打开对话框,代码工作正常:

} catch (Exception e) {
    System.out.println("Exception caught in task!");
    Platform.runLater(() -> {
        Alert dialog = new Alert(AlertType.ERROR, "Error", ButtonType.OK);
        dialog.show();
    });
}

触发
onFailed
处理程序的异常的标准方法是使用异常退出
调用
方法:

} catch (Exception e) {
    System.out.println("Exception caught in task!");
    throw e;
}
您可以简单地删除try-catch,而不是重新引发异常,但这不再允许您将消息打印到任务内部的控制台

task.setOnFailed(evt -> {
    System.out.println(task.getException().getMessage());
    Alert dialog = new Alert(AlertType.ERROR, "Error", ButtonType.OK);
    dialog.show();
});

如果正确打开对话框,代码工作正常:

} catch (Exception e) {
    System.out.println("Exception caught in task!");
    Platform.runLater(() -> {
        Alert dialog = new Alert(AlertType.ERROR, "Error", ButtonType.OK);
        dialog.show();
    });
}

触发
onFailed
处理程序的异常的标准方法是使用异常退出
调用
方法:

} catch (Exception e) {
    System.out.println("Exception caught in task!");
    throw e;
}
您可以简单地删除try-catch,而不是重新引发异常,但这不再允许您将消息打印到任务内部的控制台

task.setOnFailed(evt -> {
    System.out.println(task.getException().getMessage());
    Alert dialog = new Alert(AlertType.ERROR, "Error", ButtonType.OK);
    dialog.show();
});

这是解决方案,我选择费边的答案以便更好地解释。非常感谢!这是解决方案,我选择费边的答案以便更好地解释。非常感谢!感谢你为我展示了解决问题的不同方法。感谢你为我展示了解决问题的不同方法。