
SwingUtilities.invokeLater(new Runnable() {}について
以前質問でgooで教えて頂いた際、以下のようなコードがありました。
どのような効果があるのか教えてください。
APIを見ても理解できませんでした。
また、APIを理解するコツのようなものはあるでしょうか。
ご存知の方がおられましたら教えてください。
・試してみたこと
重いプログラムを起動させ、実行速度を比べた。------ほとんど同じでした。
public static void main(String a[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new test();
}
});
}
No.1ベストアンサー
- 回答日時:
こんにちは。
これについては、知らなければ、訳がわからないのも無理がないと思います。
Swing はシングルスレッド設計になっています。
複数のスレッドに同時にアクセスされることを考慮されていません。
よって、何か長い処理を別スレッドで実行したとしても、Swing コンポーネントにアクセスするときだけは、SwingUtilities#invokeLater() メソッドなどを使い、イベントディスパッチスレッドに、アクセス部分の処理を委譲します。
まあ、ここまでは、いいのですが、ご質問の件です。
昔は、普通に
public static void main(String[] args) {
JFrame frame = new JFrame();
・・・
・・・
frame.setVisible(true);
}
こう書いていました。
しかし、ある時、誰か偉い人が、「これって、やばいんじゃない?」と気がついてしまったわけです。
元々、JFrame の構築の段階で、メインスレッドがアクセスしてしまっていますが、イベントディスパッチスレッドが走り始めるのは、JFrame#setVisble() メソッドの時なので、これは、これで、大丈夫だろうと思われていました。
しかし、JFrame#setVisible() メソッド内部で、メインスレッドが残っている間に、いくつかのイベントが発生してしまい、わずかながら Swing コンポーネントに複数スレッドが同時アクセスする時間があると言うことです。
まあ、ほとんどの場合は、問題ないのですが、「問題が発生するかもしれないし、しないかもしれない」ということが問題なのです。
「じゃあ、最初から、イベントディスパッチスレッドにお任せしよう」ということになって、こんな呪文めいた儀式が行われるようになったわけです。
参考URL:http://d.hatena.ne.jp/torutk/20060928#p2
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptからJAVAクラスを呼...
-
tryの終了
-
表示待ち時間に「処理中...」の...
-
vba Sleep関数について教えてく...
-
「タイプ初期化子が例外をスロ...
-
eclipse-Tomcatでのデバッグに...
-
関数内の変数に<summary>コメン...
-
エクセルVBAで、条件に一致する...
-
中学のクラス数
-
javascriptからjavaを呼び出したい
-
【sendkeysメソッドが動かずに...
-
Excelで =EMBED("Acrobat Docu...
-
引数で日付を2つ与え、その間の...
-
サーブレットコンテキストの意...
-
UMLのクラス図はmain()も含むん...
-
リフレクション
-
0歳児の指しゃぶりに関して
-
final修飾子を使っているのに、...
-
変数名の付け方
-
ウィンドウを最前面にできません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaプログラムからポップアッ...
-
Javaでのデバッグコード削除
-
tryの終了
-
Tomcat高負荷時の設定について
-
SwingUtilities.invokeLater(ne...
-
ラベルの表示までが異常に遅い...
-
vba Sleep関数について教えてく...
-
Delphiのマルチスレッドの割り...
-
ラジオボタンの選択判定
-
アコーディオンメニューをアン...
-
JSP、サーブレットの初期処理
-
ftp 同時複数接続の負荷テスト...
-
[Java] while(true)の意味
-
C#で別スレッドの終了を知りたい
-
switch文の中に、throws new Ex...
-
アロー関数がよくわかりません
-
セル範囲で文字を検索はFor必須?
-
PHP
-
Servlet+JSPを使ったWEBアプリ...
-
Javaプログラムから外部コマン...
おすすめ情報