0

int 変数をインクリメントし、その値を JLabel に表示する gui を使用した単純な JAVA プログラムがあります。run メソッドが単純に実行する Runnable クラスで EventQueue.invokeLater() を呼び出して、JLabel を適切に (スレッドセーフに) 更新するための新しいスレッドを作成します。

EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            label.setText("" + number);
        }
    });

プログラムを実行すると、予想どおり、ラベルの番号が 1 から約 5000 に急速に増加し始めますが、その後速度が低下し始め、100255、173735、235678 などのラベルの更新と、ブロックされた GUI によるそれらの間の大きな一時停止が見られ始めます。しかし、EventQueue.invokeLater() を使用せずにコンパイルすると、直接呼び出すだけでlabel.setText("" + number);すべてが正常に機能し、ラベルの各番号が非常に速く変化することがわかります。しかしもちろん、その場合、私のメソッドはスレッドセーフではないことに気付きます。

どうしたの?EventQueue の動作が遅いか何かのように思えます。

4

1 に答える 1