• 締切済み

SwingUtilities.invokeLater(new Runnable()はなんですか?

Javaのmain()にあるこれはなに? SwingUtilities.invokeLater(new Runnable(){ これはなんですか? IDEによって自動的に追加されたみたいですが、消すとなにか問題がありますか?

みんなの回答

noname#94983
noname#94983
回答No.1

おそらくJFrameのインスタンスを作って画面に表示するとかいった処理を行っていると思う。Swingで、コンテナやコンポーネントを作成したりするような処理は、SwingUtilities.invokeLaterを使って実行することが推奨されている。 このSwingUtilities.invokeLaterは、イベントキューに処理を登録し、実行する働きを持つ。これにより、その他の何らかの(早急に実行すべき)処理があった場合にはそれらが終わった後にイベントキューに従って処理が実行される。こうすることにより、非同期にかつ安全に処理を実行させることができる。 実はSwingというのはシングルすれどで設計されている。だから、何かの処理を実行すると、その間、他の処理がとまってしまう。そこで、直接メインスレッド内で実行させるのでなく、SwingUtilities.invokeLaterを使ってイベントキューに登録し、安全に実行させるほうがよい、というわけ。 が、まぁ実際問題として、コンポーネント類の初期化などでSwingUtilities.invokeLaterせずメインスレッドから実行したためにトラブルが起こるというようなことは(コード自体がバグってない限り)まずないと思っていいので、たいていの人はSwingUtilities.invokeLaterを使わず直接mainに処理を書いていると思う。「本当はこうしたほうがいいが、まぁしなくても問題が起こることはまずないだろう」ということ。

rescue99
質問者

お礼

わかりやすい解説をありがとうございます!!

すると、全ての回答が全文表示されます。

関連するQ&A