コンソール出力をリアルタイムで JTextArea に表示する「ConsoleFrame」があります。
出力ストリームをリダイレクトしました:
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が 原因でそれが発生します.ちゃんと?