В моем приложении есть консоль, на которую перенаправляется весь контент системного потока печати.
Мое приложение также будет выводить специальные символы, особенно другие языки (азиатские языки, русский, арабский и т. д.).
Я использую 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.
write
не сработает. Возможно, вы захотите изучить UTF-8 и разработать лучший метод. - person RealSkeptic   schedule 01.10.2015Font font = new Font("Consolas", Font.PLAIN, 12);
Поддерживает ли этот шрифт соответствующие наборы символов? - person Andrew Thompson   schedule 01.10.2015