简体   繁体   中英

Apply a listener to System.err?

I have this idea, that anytime an unhandled exception occurs in my JavaFX program, that instead of relying on console output, I can display an alert to the user. I am thinking that perhaps I can capture the output from System.err to use. Here is what I have tried thus far.

    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);

This code segment works if I replace System.err with System.out, and System.setErr to System.setOut . However that is capturing System.out, not System.err. I suppose the better question would be, what exact function does System.err call when displaying an error to the console? So that may override it. Any tips are appreciated.

I think you have the wrong approach. If you want to display an alert to the user when there is an unhandled Exception, you can do that by setting a DefaultUncaughtExceptionHandler:

Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
       // show alert to user
       e.printStackTrace();
       // do whatever you want with the Exception e

    });

You can create a JavaFX Alert customized to show an exception stack trace along with a brief message. This link shows the code for the below.

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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