我的想法是,只要JavaFX程序中发生未处理的异常,我就可以不依赖控制台输出,而是向用户显示警报。我在想,也许我可以捕获System.err的输出以供使用。到目前为止,这是我尝试过的。
PrintStream myStream = new PrintStream(System.err) {
@Override
public void println(String s) {
super.println(s);
Log.debugLog(s); //this function logs to a file and displays an alert to user
}
};
System.setErr(myStream);
如果我将System.err替换为System.out,并将System.setErr
替换为System.setOut
,则此代码段有效。但是,那是捕获System.out而不是System.err.
我想更好的问题是,在向控制台显示错误时,System.err调用什么确切函数?这样就可以覆盖它。任何提示表示赞赏。
答案 0 :(得分:0)
我认为您的方法错误。如果要在发生未处理的异常时向用户显示警报,可以通过设置DefaultUncaughtExceptionHandler来实现:
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
// show alert to user
e.printStackTrace();
// do whatever you want with the Exception e
});
答案 1 :(得分:0)
您可以创建一个自定义的JavaFX Alert,以显示异常堆栈跟踪以及一条简短消息。 link显示以下代码。