-PR-
締切済み

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

  • 困ってます
  • 質問No.4916225
  • 閲覧数1118
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 93% (350/373)

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

SwingUtilities.invokeLater(new Runnable(){

これはなんですか?
IDEによって自動的に追加されたみたいですが、消すとなにか問題がありますか?
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1

おそらくJFrameのインスタンスを作って画面に表示するとかいった処理を行っていると思う。Swingで、コンテナやコンポーネントを作成したりするような処理は、SwingUtilities.invokeLaterを使って実行することが推奨されている。

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

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

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

お礼率 93% (350/373)

わかりやすい解説をありがとうございます!!
投稿日時 - 2009-05-01 23:57:07


このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


専門家があなたの悩みに回答!

ピックアップ

ページ先頭へ