我正在設計一個程序,其中有一個JEditorPane
用戶可以輸入和編譯Java代碼。然後他們可以在新的過程中運行他們的程序,然後他們的輸出將顯示在JTextArea
中。我通過延伸JTextArea
和添加此作爲成員實現這一點:修復由於JTextArea而導致無響應的GUI?
private OutputStream writer = new OutputStream() {
public void write(int b) {
Console.this.append(String.valueOf((char) b));
}
};
我然後有一個簡單的方法getStream()
,用於返回該OutputStream
裹在PrintWriter
,並調用System.setOut()
和System.setErr()
與PrintWriter
。
現在出現這個問題:如果用戶編譯一個程序,其中很多輸出一次被髮送到控制檯(例如,調用System.out.println()
的無限循環),則整個GUI掛起。我試圖通過使用SwingWorker
來解決這個問題來處理append()
調用,但似乎沒有任何工作。
即使將大量文本寫入JTextArea
,是否有辦法保持GUI的響應?我假設問題的一部分是在append()
調用後更新GUI的時間量。有沒有辦法延遲少量寫入JTextArea
,以便用戶可以點擊按鈕來終止進程?
我希望我是錯的,但我不知道我們是否有足夠的信息能夠給你一個明確的正確答案。例如,我真的無法基於簡單的描述來猜測,爲什麼你的圖形用戶界面(GUI)掛起,而不是你可能仍在踏上美國東部時間。追加附加到JTextArea?然後你不想在後臺線程中調用它。而是應該在美國東部時間。 –
但是這不會阻止我猜測! :) –
我正在編寫EDT,至少根據Eclipse調試器。有沒有其他信息可以幫助? – euclio