1

JTextAreaテキストを動的に追加/追加しようとしています。私はやってみました:

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

実際には、ループiの完了後にすべての値が jtextarea に追加されます。でも、ループが進んでいるのでjtextAresに値を付けforたい。前もって感謝します。ifor

4

2 に答える 2

3

イベントディスパッチスレッドでこれを行っていると仮定し、処理コードがこのスレッドをブロックします。その結果、JTextArea再塗装できません。

UI スレッドの処理コードを取得する必要があります。通常は を使用することをお勧めしますSwingWorkerが、この場合は通常Threadの を使用し、EDT で通話SwingUtilities.invokeLaterをスケジュールするために使用する方が簡単な場合があります。append

注: appendJDK1.7 の時点で EDT を呼び出すことをお勧めします。そのメソッドの javadoc には、スレッド セーフであるとは記載されていません (1.6 の javadoc では、これについてはまだ言及されています)。しかし、この質問を見ると、1.6 でも EDT で呼び出す方がおそらく安全であることがわかります。

Concurrency in Swingチュートリアルは、このトピックについてよく読んでいます。

于 2012-05-01T06:24:35.717 に答える
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***********
}
于 2012-05-01T06:26:19.450 に答える