向 System.err 应用侦听器?
Apply a listener to System.err?
我有这样的想法,只要我的 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 调用什么函数?所以这可能会覆盖它。任何提示表示赞赏。
我认为你的做法不对。如果您想在出现未处理的异常时向用户显示警报,您可以通过设置 DefaultUncaughtExceptionHandler:
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
// show alert to user
e.printStackTrace();
// do whatever you want with the Exception e
});
您可以创建自定义的 JavaFX 警报以显示异常堆栈跟踪以及一条简短消息。 link 显示以下代码。
我有这样的想法,只要我的 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 调用什么函数?所以这可能会覆盖它。任何提示表示赞赏。
我认为你的做法不对。如果您想在出现未处理的异常时向用户显示警报,您可以通过设置 DefaultUncaughtExceptionHandler:
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
// show alert to user
e.printStackTrace();
// do whatever you want with the Exception e
});
您可以创建自定义的 JavaFX 警报以显示异常堆栈跟踪以及一条简短消息。 link 显示以下代码。