我的应用程序有一个控制台,所有系统的打印流内容都被重新路由到该控制台。
我的应用程序还将输出特殊字符,特别是其他语言(亚洲语言、俄语、阿拉伯语等)
我使用 JTextArea 作为控制台输出:
consoleOutput = new JTextArea(1, 50);
DefaultCaret caret = (DefaultCaret) consoleOutput.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Font font = new Font("Consolas", Font.PLAIN, 12);
consoleOutput.setFont(font);
JScrollPane scrollPane = new JScrollPane(consoleOutput);
this.add(scrollPane, BorderLayout.CENTER);
//CHANGE OUTPUT TO THIS CONSOLE
PrintStream out = new PrintStream(new TextAreaOutput(consoleOutput));
System.setOut(out);
System.setErr(out);
而这个类来重新路由打印流:
public class TextAreaOutput extends OutputStream {
JTextArea outputConsole;
public TextAreaOutput(JTextArea outputConsole) {
this.outputConsole = outputConsole;
}
@Override
public void write(int b) throws IOException {
outputConsole.append( String.valueOf( ( char )b ) );
}
}
这有效,打印流打印到这个 jtextarea。但是,我有编码问题。特殊字符(如▒, █, .نت, 览, etc
无法正确呈现)。有些可能被硬编码到源文件中(我使用的是 UTF-8),但有些可能是使用 selenium webdriver 从网络中提取的。