2012-03-24 15 views
0

私はJTabbedPaneの異なるタブで異なるダイアログを表示する簡単なチャットプログラムを作成しています。私はJTextAreaを使ってダイアログを表示しました。私はこのようなタブにJTextAreaを追加しました:JTabbedPaneコンポーネントを更新する

JTextArea referenceToAppend = new JTextArea(); 
JTabbedPane.addTab(title,new JPanel(new JScrollBar(referenceToAppend))); 

私はListに参照referenceToAppendを入れ、その後、私はテキストを追加する必要がある場合、私は 次のようにします。

List.get(index).append(textForAppend); 

問題は次のとおりです。私のアプリケーションは応答しなくなります。どうすればこの問題を解決できますか?私はフォーラムやもちろんOracleに関する多くの情報を調べました。私は必要なものを見つけることができません。たぶん私は慎重ではなかったかもしれないし、私は何かを理解していないかもしれない。誰かが簡単な例を挙げたり、別のフォーラムにリンクしてこの問題について話し合うことができれば、とても感謝しています。

+3

[* Event Dispatch Thread *](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html)をブロックしているようです。あなたのコードをより多く投稿するか、[SSCCE](http://sscce.org)は、私たちがあなたを助けるのに役立ちます。 – Jeffrey

答えて

1

SwingWorkerをご覧ください。イベントディスパッチスレッドへのレポート情報をバックグラウンドスレッドで操作することができます。ソケットの読み込みをブロックする必要がある場合は、バックグラウンドスレッドでUIの応答性を維持するためにそれを行う必要があります。

+0

ありがとうJeffreyとDevon_C_Miller!私はスイングのシングルスレッドモデルについては知られていましたが、テキストを追加する操作は時間がかかりませんが、問題がはるかに深いことを理解しているので、EDTでスイングコンポーネントで作業する必要があります。新しいSwingWorker(){public Object doInBackGround(){戻り値null} public void done(){JTextArea.append(text)}} .execute();どうもありがとう !! –

関連する問題