【发布时间】:2019-02-08 12:51:14
【问题描述】:
我有这样的想法,即每当我的 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 调用的确切函数是什么?所以这可能会覆盖它。任何提示表示赞赏。
【问题讨论】:
-
将方法调用包装在
try-catch中并完成 -
是什么让你觉得它不起作用?更改为
err流后尝试调用System.err.println("foobar")。 -
相关的,甚至可能是重复的:stackoverflow.com/questions/13841884/…(您可以扩展
FilterOutputStream以将输出保留在System.err。)但是这样您就不能确定错误是否在给定的情况下完全打印时间。调用的确切顺序是您不应该依赖的实现细节。 -
您的代码将在您调用时满足您的需求:
System.err.println("foobar")而不是System.out.println("foobar")。
标签: java exception javafx error-handling exception-handling