У меня есть «ConsoleFrame», который должен отображать мой консольный вывод в реальном времени на JTextArea.JTextArea в другом дисплее консоли JFrame в реальном времени
Я перенаправлен выходные потоки:
private void redirectSystemStreams() {
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
updateTextArea(String.valueOf((char) b));
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
updateTextArea(new String(b, off, len));
}
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
};
System.setOut(new PrintStream(out, true));
System.setErr(new PrintStream(out, true));
}
и вызовите SwingUtilities.invokeAndWait метод, чтобы добавить новый текст, который работает мелкого
private void updateTextArea(final String text) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
txt_console.append(text);
}
});
} catch (InterruptedException ex) {
} catch (InvocationTargetException ex) {
}
}
но он показывает мне в моем новом ConsoleFrame эта ошибка: java.lang.Error: Не удается вызвать invokeAndWait из потока диспетчера событий , и я получаю это из-за EDT - но почему я t и как я могу адаптировать свой код, чтобы он работал правильно?
Используйте 'invokeLater'. Не игнорируйте исключения. –
invokeLater просто показывает мне результат ПОСЛЕ завершения процесса вычисления, мне нужно это в реальном времени Я игнорирую исключения только здесь, чтобы сохранить несколько строк –