Я пытаюсь перенаправить мой вывод в текстовой области (который будет встроен где-то в JFrame, используя следующий фрагмент кодаStdout Перенаправление с Logger
public static void main(String[] args) {
Logger.getLogger(MyClass.class.getName()).info("Test");
final JTextArea x = new JTextArea();
PrintStream printStream = new PrintStream(new OutputStream(){
@Override
public void write(int b) throws IOException {
x.append(String.valueOf((char)b));
x.setCaretPosition(x.getDocument().getLength());
}
});
System.setOut(printStream);
System.setErr(printStream);
Logger.getLogger(MyClass.class.getName()).info("Test again");
System.out.println("Another test");
JOptionPane.showMessageDialog(null, x.getText());
}
Однако при выполнении последней линии, JOptionPane текст был только «Другой тест». Когда я удалить первый Logger линию
Logger.getLogger(MyClass.class.getName()).info("Test");
Тогда все перенаправлены на JTextArea. Я подозреваю, что после того, как я вхожу «Test» в первой строке, класс Logger связывает на консольный выход и не будет giv даже если stdout перенаправляется на TextArea.
Возможно, что getLogger сохраняет «PrintStream», связанный с 'System.out', и сохраняет ссылку на него. Отсюда ваш результат. – fge