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