• 締切済み

SwingでSwingUtilities.invokeLater()の利用

はじめまして。Javaビギナーです。 今Swingを利用したチャットアプリを作成しようと色々調べているところなのですが、よくmain()メソッド内にて public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { // 初期処理 } }); } というのを見かけます。 これは、Swingでアプリを実行する場合に上記のように作成することが一般的なのでしょうか? それとも、マルチスレッドを利用する必要のない場合などは上記のようなコーディングは行われないのでしょうか? 後々の機能拡張などを考えれば、上記のようにコーディングした方が良いのだと思いますが、一般的な利用方法を教えていただければと思います。宜しくお願いします。

  • Java
  • 回答数1
  • ありがとう数2

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

comp.lang.java.guiのFAQ(日本語訳): http://homepage1.nifty.com/algafield/JavaGUIFaq19j.html のQ4.3をクリックしてみてください。

参考URL:
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/initial.html
_chihiro_
質問者

お礼

_ranco_さん、ありがとうございます。 そのものズバリが書かれてありました。

関連するQ&A

  • SwingとEDT(イベントディスパッチスレッド)

    多くのサイトを見て、色々考えているのですが、イマイチ理解が及びません。以下のような風に思っていていいのでしょうか。 ・Swingではメインとなるmainスレッド(表現は正しくないかもしれない)と、描画関係のイベントを実行するイベントディスパッチスレッドで出来てる。 ・描画関係のイベント(正確にはコンポーネントの可視化及び可視化したコンポーネントの描画)はイベントディスパッチスレッド上で実行しなければならない。 ・SwingUtilities.invokeLaterを使うことによってその中身のプログラムをイベントディスパッチスレッドで実行してくれる...? →setVisible(true)やsetText("")など全てSwingUtilities.invokeLaterを使って記述しなければならない.....???(面倒すぎじゃないでしょうか) ・Swingでのマルチスレッドを行うにはSwingWorkerを使う(ことは見つけているのですが、まずEDTについて理解しないと先に進めないと思い、まだあまりこれの内容は調べていません) ・描画系の命令を実行しないのならば、別スレッドを作成して使用しても良い....? こんなところでしょうか。 しかし、このとおりだとすると今までの自分の書いてきたプログラムは間違いだらけ(特に「全ての描画系命令をSwingUtilities.invokeLaterを使いEDTで実行する」点)になってしまいます。 ちゃんとした理解をしておきたいので、わかりやすい説明でも、上記の間違っている点でもご教示願います。

  • SwingUtilities.invokeLater(new Runn

    SwingUtilities.invokeLater(new Runnable() {}について 以前質問でgooで教えて頂いた際、以下のようなコードがありました。 どのような効果があるのか教えてください。 APIを見ても理解できませんでした。 また、APIを理解するコツのようなものはあるでしょうか。 ご存知の方がおられましたら教えてください。 ・試してみたこと  重いプログラムを起動させ、実行速度を比べた。------ほとんど同じでした。   public static void main(String a[]) { SwingUtilities.invokeLater(new Runnable() { public void run() { new test(); } }); }

    • ベストアンサー
    • Java
  • SwingUtilities.invokeLater(new Runnable()はなんですか?

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

  • swingについて。

    今JDBCとJAVAを利用してswingからMySQLへの接続と検索を独学でやろうと思っているのですが。 まず最初にswing画面でユーザとパスを入れてログインできるようにしたいのですがどうしてもできないのでアドバイスお願いします。 class Swing{ swingについて色々ユーザ&パス入力画面&ボタン } class MySQLconn{   MySQL接続   ユーザ名&パス&urlをmainから受け取って   接続を試みてDriverManager.getConnection   をmainに返す class MySQLselect{ 検索内容    mainから受け取り検索&表示 class Main{ それぞれのメソッドを利用する   例外が出たとき用にtry-catchがある    こんな感じなのですがMainでBufferedReaderでやっていたときはちゃんとできたのですがswingを使うと ユーザ名&パスが最初は何も入っていない状態になってしまいMainで例外が出て終わってしまいます。 なんとかswingでユーザ名&パスを入力してからその後 実行をさせる事はできないでしょうか。 アドバイスお願いします。   

    • ベストアンサー
    • Java
  • mainクラス内に書いたメソッドの宣言の仕方(staticの必要性)

    java を勉強中の超初心者です、宜しくお願いします。 main と同じクラスに disp というメソッドを作成してやり、” void disp(int a , int b )”と書いてやりましたが、mainからアクセス出来ません。 そこで、” static void disp(int a , int b )” という風に” static ” を先頭につけてやりましたら、うまく動きました。 これは、mainメソッドから他のメソッドにアクセスする場合には、必ず” static ” をつけてやる必要があるということでしょうか。 ======================================================= class クラス練習 { public static void main(String[] args) { disp(5,10); } /*static*/ void disp(int a , int b ) { System.out.println("a+b = " + (a+b)); } }

    • ベストアンサー
    • Java
  • Appletを利用したマルチスレッドプログラミング

    現在JavaのAppletを利用したマルチスレッドのプログラミングを行っているのですが、なかなか思うように行きません。 やりたいのは同じクラスを持つインスタンスをそれぞれスレッドで動かし、それぞれ個別に操作を与えたいのです。 例えばこのサイトのページではボール1、ボール2をそれぞれ作成していますが、もう少し汎用化したいのです。 http://www.mm2d.net/applet-howto/howto-07.shtml 例えばAppletで動かすSampleBallクラスのインスタンスを複数作成し、 それぞれスレッドで動かすにはどうすれば良いでしょうか。 別クラス(ファイル)として作成したいです。 イメージとしてはこのような感じなのですが、Main.javaを起動するとAppletが起動しません。 またそれぞれスレッドで動かすということで、任意にAppletにSampleBallクラスのインスタンスを 追加したり、削除したり、操作したりするにはどうすればよいでしょうか。 ・Main.java static void main(String args[]) {   SampleBall ball1 = new SampleBall(・・・);   SampleBall ball2 = new SampleBall(・・・);   SampleBall ball3 = new SampleBall(・・・);   … } ・SampleBall.java public class SampleBall extends Applet implements Runnable{ public SampleBall(…){ ・・・ }    public void changeColor(Color col){・・・}    … } 参考になるページ等も教えて頂ければ助かります。 どうぞよろしくお願いします

  • Eclipseで、クラスを新規作成する時に付いてくるコメント

    Eclipseで、クラスを新規作成する時に付いてくるコメント クラスを新規作成すると、自動的に下記のようなコメントが 書かれてきますが、いつもいちいち行削除しています。 一般的には、このままにしておくものなのでしょうか。 それとも、消した方が良いのでしょうか。 宜しく御願い申し上げます。 public class Sample { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ } }

    • ベストアンサー
    • Java
  • public static void main(String args

    public static void main(String args[]) { と public static void main(String[] args) { は何が違います?

    • ベストアンサー
    • Java
  • エラー・・

    エラー: メイン・メソッドがクラス???のstaticではありません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) ストレートに言って、この意味わかりません; このエラーはどこを直したらいいんですか? 私は学生なので、わからないところもありますが・・ 回答よろしくお願いします!!

  • javaのプログラムに関する質問

    * 入力された数値の数だけ、"*"を表示するメソッド * displayAsterメソッドを作成して下さい。 */ public class MethodAdd3 { public static void main(String[] args){ // 入力された数字をint型の数値に変換 int iInput = Integer.parseInt(args[0]); // displayAsterメソッドの呼び出し displayAster(iInput); } // ここにdisplayAsterメソッドを作成 public static void displayAster(int iInput1){ for(i=0; i<iInput1; i++){ System.out.print("*"); } System.out.println(""); } ここまで出来たのですが、コンパイルエラーになってしまいます。 考え方かヒントなど、知恵をお貸しください。

専門家に質問してみよう