我有一個「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,我得到了這個結果 - 但爲什麼我工作和我如何適應我的代碼,使其正常工作?
使用'invokeLater'。不要忽略異常。 –
invokeLater只顯示計算過程完成後的輸出,我需要它實時 我忽略只有在這裏的例外,保存幾行 –