2011-06-24 2 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 Workerを使用した簡単な解法と詳細な説明については、ConcurrencyのSwingチュートリアルのセクションを読んでください。

+0

面白い...しかし、コードがファームウェアをデバイスにフラッシュしているので、インターフェイスをブロックしなければなりません。私はすべてのコントロールを無効にして、新しいスレッドを開始してから、スレッドレポートを元に戻すことができます。それとも良い方法がありますか? – AdamOutler

+0

JTextAreaを含むモーダルダイアログを表示すると、更新が終了したらダイアログを閉じることができます。 – camickr

+0

スイングワーカーは単純ですが.....それを説明するビデオを見つけることができますか? – AdamOutler

関連する問題