繁体   English   中英

将侦听器应用于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 Alert,以显示异常堆栈跟踪以及简短消息。 链接显示以下代码。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM