2016-04-14 5 views
1

Я разрабатываю главный класс, который записывает возможные исключения с помощью e.printStackTrace() и который заканчиваетсяПочему очистка не работает на System.err?

System.err.flush(); 
System.out.println("\n>>> EXITING..."); 

Проблема в том, что, когда исключение след большой, мой выход сообщение по-прежнему печатается в середине всех проповедь об ошибке.

Что я делаю неправильно?

+4

Пожалуйста, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve). –

+0

Включены ли несколько потоков? – AJNeufeld

+0

Я боюсь, что это не детерминировано, так как мой личный код использует разные операции с разными лагами, а буфер может быть полным или нет, и каждый терминал имеет свою производительность. Это немного хитом и промахом, пока я не дойду до ситуации, поэтому я не думаю, что нужен бенчмаркинг. Это должна быть концептуальная проблема. C'mon его однопоточность и логически реплицируемая с 3 строками. – Whimusical

ответ

2

System.err и System.out - это два отдельных потока. Даже если вы очищаете выход, это означает, что все символы были отправлены в o/s. Терминал (?), Считывающий оба потока, может по-прежнему перемежать два потока, когда он отображает их.

Одним из средств правовой защиты может быть объединение потоков вместе, эффективное направление потока , которое должно быть записано в System.out, но вы потеряете любую окраску и т. Д., Которая выделяет два потока при отображении.

 Смежные вопросы

  • Нет связанных вопросов^_^