JTextArea
テキストを動的に追加/追加しようとしています。私はやってみました:
for(int i=0;i<10;i++){
jtextArea.append("i="+i);
//some processing code***********
}
実際には、ループi
の完了後にすべての値が jtextarea に追加されます。でも、ループが進んでいるのでjtextAresに値を付けfor
たい。前もって感謝します。i
for
イベントディスパッチスレッドでこれを行っていると仮定し、処理コードがこのスレッドをブロックします。その結果、JTextArea
再塗装できません。
UI スレッドの処理コードを取得する必要があります。通常は を使用することをお勧めしますSwingWorker
が、この場合は通常Thread
の を使用し、EDT で通話SwingUtilities.invokeLater
をスケジュールするために使用する方が簡単な場合があります。append
注: append
JDK1.7 の時点で EDT を呼び出すことをお勧めします。そのメソッドの javadoc には、スレッド セーフであるとは記載されていません (1.6 の javadoc では、これについてはまだ言及されています)。しかし、この質問を見ると、1.6 でも EDT で呼び出す方がおそらく安全であることがわかります。
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***********
}