2012-05-01 29 views
1

我試圖動態地添加/附加文本到JTextArea。我試着這樣做:使用Java動態添加文本到JTextArea

for(int i=0;i<10;i++){ 
    jtextArea.append("i="+i); 
    //some processing code*********** 
} 

其實所有ifor循環結束後追加到JTextArea中。但是我想將i值添加到jtextAres中,因爲for循環正在進行。提前致謝。

回答

3

我假設您在事件調度線程上執行此操作,您的處理代碼將阻止此線程。因此,JTextArea無法重新繪製。

您需要獲取UI線程的處理代碼。正常的建議是使用SwingWorker,但在這種情況下,只需使用常規Thread並使用SwingUtilities.invokeLater在EDT上調度append調用可能會更容易。

注意:我建議在JDK1.7的EDT上調用append,該方法的javadoc不再聲明它是線程安全的(1.6 javadoc仍然提到這一點)。但是看看this question顯示,即使在1.6版本中,您可能也更安全地在美國東部時間將其稱爲更安全。

Concurrency in Swing教程是一個很好的閱讀關於這個主題。

3

我不知道如果我理解你的問題很好,但嘗試這樣的代碼:

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*********** 
} 
+0

如果for循環的EDT進入(我懷疑,因爲更新不可見)此次榮獲」做一件事。當然,如果它不在EDT上,並且他正在使用Java 7,而且附加程序看起來不再是線程安全的,則這是一個非常好的建議。我們顯然需要更多信息 – Robin