我正在尝试将输出重定向到文本区域(将使用以下代码嵌入JFrame中的某个位置
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.getLogger(MyClass.class.getName()).info("Test");
然后一切都被重定向到JTextArea。我怀疑在第一行中记录“Test”后,类Logger会绑定到控制台输出,即使将stdout重定向到TextArea也不会放弃。
答案 0 :(得分:1)
主方法captures the current System.err stream的第一行。如果在创建根记录器处理程序之前重新映射流,它将起作用。您还可以更改代码以创建新的ConsoleHandler,并在重新映射错误流后将其添加到根记录器。请注意违反EDT rules of Swing与当前实施的内容。