プロが教えるわが家の防犯対策術!

Javaのmain()にあるこれはなに?

SwingUtilities.invokeLater(new Runnable(){

これはなんですか?
IDEによって自動的に追加されたみたいですが、消すとなにか問題がありますか?

A 回答 (1件)

おそらくJFrameのインスタンスを作って画面に表示するとかいった処理を行っていると思う。

Swingで、コンテナやコンポーネントを作成したりするような処理は、SwingUtilities.invokeLaterを使って実行することが推奨されている。

このSwingUtilities.invokeLaterは、イベントキューに処理を登録し、実行する働きを持つ。これにより、その他の何らかの(早急に実行すべき)処理があった場合にはそれらが終わった後にイベントキューに従って処理が実行される。こうすることにより、非同期にかつ安全に処理を実行させることができる。

実はSwingというのはシングルすれどで設計されている。だから、何かの処理を実行すると、その間、他の処理がとまってしまう。そこで、直接メインスレッド内で実行させるのでなく、SwingUtilities.invokeLaterを使ってイベントキューに登録し、安全に実行させるほうがよい、というわけ。

が、まぁ実際問題として、コンポーネント類の初期化などでSwingUtilities.invokeLaterせずメインスレッドから実行したためにトラブルが起こるというようなことは(コード自体がバグってない限り)まずないと思っていいので、たいていの人はSwingUtilities.invokeLaterを使わず直接mainに処理を書いていると思う。「本当はこうしたほうがいいが、まぁしなくても問題が起こることはまずないだろう」ということ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/01 23:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!