2012-03-30 9 views
1

私はスイングで自分のコードを書いています。 awtスレッドで呼び出すことができる別のクラスのプライベート関数を起動します。私は単に私のクラスのその関数のコードをSwingUtilities.invokeLaterスレッドに書くだけです。スレッドはSwingUtilities.invokeLaterからメインスレッドに戻っていません

main() { 

    SwingUtilities.invokeLater(new Runnable() { 

     //code of private function 

    }); 

} 

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

答えて

3

SwingUtilities.invokeLaterは、現在のスレッドの実行をブロックしません。それがないと思われる場合は、単に

System.out.println("Before"); 

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

System.out.println("After"); 

を行うことができますし、BeforeAfterが右互いに多かれ少なかれ直後に印刷表示されます。あなたは正しく述べてきたように

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

1

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

関連する問題