2

多くのスレッドが StyledTextBox に急速に書き込みを行っている Java アプリがあります。ある時点で、すべてのスレッドが終了します。ただし、おそらくディスパッチ キューが少しバックアップされたため、TextBox はしばらくテキストを受信し続けます。スレッドが終了したときに TextBox への更新がすぐに終了するように、何らかの方法で EDT を強制的にフラッシュすることは可能ですか?

ありがとう、ジム

4

3 に答える 3

5

ここpush()に示すように、独自のEventQueueサブクラスを作成し、独自のメソッドを追加してキューを空にすることができます。キューが空の場合はブロックされるため、最初に確認してください。flush()getNextEvent()peekEvent()

于 2012-02-08T02:15:15.990 に答える
2

変更したテキストを適用するためのキューを使用し、戻る前にキューを空にするイベントと EDT をスケジュールします。これにより、スレッドが終了し、EDT でさらに 1 つのスケジュールされたイベントが実行されると、「空の」イベントが発生します。

于 2012-02-08T00:51:39.040 に答える
1

私は解決策を見つけました。アイデアは、テキストが に追加されるたびに呼び出される「検証」リスナーをインストールすることStyledTextです。そのため、(バックアップされたディスパッチ キューから) テキストが追加されようとしているとき、コードは、スレッドが終了したかどうかを示すフラグが設定されているかどうかを調べます。スレッドが終了している場合は、テキストの更新を無視します。これにより、イベント キューを排出しながら、コントロールの更新を停止できます。次のコード スニペットは、この問題を解決します。

txtOutputStyledTextコントロールです。スレッドが終了したときに
endingThreads設定booleanされます。 これは、SWT アプリケーションで問題を処理する最も簡単な方法のようです。true

        txtOutput.addVerifyListener(new VerifyListener() {
        public void verifyText(VerifyEvent e)
        {
            if( !endingThreads )
            {
                e.doit = true;
            }
            else
            {
                e.doit = false;
            }
        }
    });
于 2012-02-08T20:01:52.577 に答える