我試圖動態地添加/附加文本到JTextArea
。我試着這樣做:使用Java動態添加文本到JTextArea
for(int i=0;i<10;i++){
jtextArea.append("i="+i);
//some processing code***********
}
其實所有i
值for
循環結束後追加到JTextArea中。但是我想將i
值添加到jtextAres中,因爲for
循環正在進行。提前致謝。
我試圖動態地添加/附加文本到JTextArea
。我試着這樣做:使用Java動態添加文本到JTextArea
for(int i=0;i<10;i++){
jtextArea.append("i="+i);
//some processing code***********
}
其實所有i
值for
循環結束後追加到JTextArea中。但是我想將i
值添加到jtextAres中,因爲for
循環正在進行。提前致謝。
我假設您在事件調度線程上執行此操作,您的處理代碼將阻止此線程。因此,JTextArea
無法重新繪製。
您需要獲取UI線程的處理代碼。正常的建議是使用SwingWorker
,但在這種情況下,只需使用常規Thread
並使用SwingUtilities.invokeLater
在EDT上調度append
調用可能會更容易。
注意:我建議在JDK1.7的EDT上調用append
,該方法的javadoc不再聲明它是線程安全的(1.6 javadoc仍然提到這一點)。但是看看this question顯示,即使在1.6版本中,您可能也更安全地在美國東部時間將其稱爲更安全。
Concurrency in Swing教程是一個很好的閱讀關於這個主題。
我不知道如果我理解你的問題很好,但嘗試這樣的代碼:
for(int i = 0; i < 10; i++)
{
final int x = i;
SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run()
{
jtextArea.append("i=" + x);
}
});
//some processing code***********
}
如果for循環的EDT進入(我懷疑,因爲更新不可見)此次榮獲」做一件事。當然,如果它不在EDT上,並且他正在使用Java 7,而且附加程序看起來不再是線程安全的,則這是一個非常好的建議。我們顯然需要更多信息 – Robin