編輯:我已編輯帖子來澄清我的問題,現在我自己,有更多的理解。System.out.println到JTextArea
正如標題所示,我在執行應用程序的任務時嘗試在我的GUI中輸出控制檯到我的JTextArea
。
這是我目前在做什麼:
public class TextAreaOutputStream extends OutputStream
{
private final JTextArea textArea;
private final StringBuilder sb = new StringBuilder();
public TextAreaOutputStream(final JTextArea textArea)
{
this.textArea = textArea;
}
@Override
public void flush()
{
}
@Override
public void close()
{
}
@Override
public void write(int b) throws IOException
{
if (b == '\r')
return;
if (b == '\n')
{
final String text = sb.toString() + "\n";
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
textArea.append(text);
}
});
sb.setLength(0);
}
sb.append((char) b);
}
}
以上將成功地重新直接System.out
我上面的輸出流,因此寄發一個事件到EventQueue
來更新我的GUI(JTextArea
)。
這裏是問題:
目前使用invokeLater()
意志,因爲它說的文檔:
Causes runnable to have its run method called in the dispatch thread of the EventQueue. This will happen after all pending events are processed.
所以我真正想要做的是履行我更新的圖形用戶界面(通話run()
)在處理EventQueue中的所有其他事物之前。
是否有可能將一個事件基本注入到我的EventQueue中?或者有人可以指點我在這方面的一個體面的教程?
感謝,
_「上面在這個意義上的作品,我得到系統輸出到我的JTextArea,但是當我試圖做到這一點在的actionPerformed(),我沒有得到任何輸出解決方案」 _和你確定你通過了所有這些如果是?沒有很好的理由爲什麼一個'System.out'調用可以工作,另一個失敗 – Robin