2011-06-24 63 views
0

我想實時追加一個字符到文本區域。jTextArea不更新,直到循環結束

我有一個名爲br的緩衝讀取器,它正在讀取文本區域的一個很長的過程。

 cmd=ArrayOfCommandsWhichWorkProperly 

     Runtime run = Runtime.getRuntime() ; 
     pr = run.exec(cmd); 
     BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream())) ; 

     while ((c=br.read()) >-1) { 
      String s=Character.toString((char)br.read()); 
      //Why is this text box not updating? 
      jTextArea2.append(s); 

     }   

似乎有一定的方式或東西的acellerator ... 的問題是,它不更新,直到整個PROCESSS完成。我可以添加什麼來使文本框更新?

我試過Thread.sleep和Thread.yeild。看來,jTextArea只是積累和更新,直到過程完成。

回答

2

我試過Thread.sleep和Thread.yeild。

在EDT上執行代碼時,切勿使用Thread.sleep()。

看來,jTextArea只是積累和更新,直到過程完成。

是的。您正在阻止EDT重新粉刷。請閱讀Swing教程中有關Concurrency的部分,以獲取更詳細的解釋以及使用Swing Worker的簡單解決方案。

+0

有趣......但是,由於代碼將固件閃爍到設備上,接口必須被阻塞。我想我應該禁用所有的控件,開始一個新的線程,然後讓線程回報以在完成時重新啓用它們?或者,還有更好的方法? – AdamOutler

+0

顯示一個包含你的JTextArea的模態對話框,然後當更新完成時你可以關閉對話框。 – camickr

+0

Swing Worker只是簡單的.....你能找到解釋它的視頻嗎? – AdamOutler