System.out.println () и System.err.println () - это разные потоки выполнения. Выходные потоки кэшируются, поэтому вся запись идет в этот буфер памяти. После периода тишины они фактически выписаны. Вот цикл for, который по существу снова показывает вашу ошибку:
for(int x = 0; x <= 5; x++) {
System.out.println("Out");
System.err.println("Err");
}
Чтобы "очистить" потоки, вызывайте .flush () каждый раз через цикл:
for(int x = 0; x <= 5; x++) {
System.out.println("Out");
System.out.flush();
System.err.println("Err");
System.err.flush();
}
В этом цикле for сначала выводятся сообщение out и сообщение об ошибке, но при каждом сбросе сначала выводятся ваши сообщения out, а затем сообщения err. На выходе будет что-то вроде:
OutErr
Out
Out
Out
Out
Out
Err
Err
Err
Err
Err
И это потому, что System.out и System.err выполняются в разных потоках.