1

私はスイングでコードを書いています。awt thread で呼び出すことができる別のクラスのプライベート関数を起動するには。その関数のコードをクラスのSwingUtilities.invokeLaterスレッドに書くだけです。

main() {

    SwingUtilities.invokeLater(new Runnable() {

        //code of private function

    });

}

しかし、この制御を実行した後、メインスレッドに戻りません。誰が何が起こっているのか、これを解決する方法を提案できますか?

4

2 に答える 2

3

SwingUtilities.invokeLater現在のスレッドの実行をブロックしません。それが信じられるなら、あなたは簡単にできる

System.out.println("Before");

SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            //code of private function
        }
    });

System.out.println("After");

そして、多かれ少なかれすぐに、次々に表示されBefore、印刷されます。After

(誤って使用していないことを確認してくださいSwingUtilities.invokeAndWait。)

于 2012-03-30T11:48:33.507 に答える
1

SwingUtilities.invokeLater(Runnable)あなたが正しく述べたように、EDTでコードを実行します。mainthread は、 の呼び出しの直後に実行を継続しますinvokeLater。デバッガーでプログラムを実行し、EDT で実行されたコードのどこかにブレークポイントがある場合、メイン スレッドが表示されない場合がありますが、mainスレッドは確実に実行されます。

于 2012-03-30T11:49:24.143 に答える