Вывод необработанного исключения, смешивающегося с выводом программы - PullRequest
0 голосов
/ 26 мая 2018

Когда я запустил эту программу в Java

package test;

public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println("line"+i);
        }
        System.out.flush();
        int x=1/0;
    }
}

я ожидал, что будет иметь следующий вывод:

line0
line1
line2
line3
line4
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at test.Main.main(Main.java:8)

Process finished with exit code 1

, но вместо этого вывод выглядел так:

Exception in thread "main" java.lang.ArithmeticException: / by zero
line0
    at test.Main.main(Main.java:8)
line1
line2
line3
line4

Process finished with exit code 1

и после того, как я запустил его снова:

line0
Exception in thread "main" java.lang.ArithmeticException: / by zero
line1
    at test.Main.main(Main.java:9)
line2
line3
line4

Process finished with exit code 1

и так далее.Строки или сообщение об исключении смешиваются с выводом случайным образом.Я пытался поставить System.out.flush(); перед int x=1/0;, но это не помогло.Это также произошло, когда я сделал свое собственное исключение (оно расширило RuntimeException) и когда я создал NullPointerException.Почему это происходит и как я могу это исправить?

1 Ответ

0 голосов
/ 26 мая 2018

Это происходит потому, что исключения печатаются с использованием System.err, которое отличается от PrintStream, чем System.out.Если вы хотите, чтобы исключения печатались с использованием System.out, вы можете позвонить System#setErr:

System.setErr(System.out);

for (int i = 0; i < 5; i++) {
    System.out.println("line"+i);
}

int x = 1 / 0;

Вывод:

line0
line1
line2
line3
line4
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Test/test.Test.main(Test.java:13)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...