• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JFrameの複数作成と終了
#navi(../)
RIGHT:Posted by [[aterai]] at 2005-06-27
*JFrameの複数作成と終了 [#pc54259a]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2005-06-27~
更新日:&lastmod;

#contents
**概要 [#h7071c6a]
JFrameを複数作成し、これらをすべて閉じた時にアプリケーションを終了します。

#screenshot
-&jnlp;
-&jar;
-&zip;

//#screenshot
#ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTJey1HvEI/AAAAAAAAAUc/KdbEeHP-Ij0/s800/CloseOperation.png)

**サンプルコード [#qf5934db]
#code{{
private static int number = 0;
public static JFrame createFrame(String title) {
  JFrame frame = new JFrame((title==null)?"Frame #"+number:title);
  frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  number++;
//frame.addWindowListener(new WindowAdapter() {
//  @Override
//  public void windowClosing(WindowEvent e) {
//    number--;
//    if(number==0) {
//      JFrame f = (JFrame)e.getSource();
//      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//    }
//  }
//});
  return frame;
}
}}
-&jnlp;
-&jar;
-&zip;

**解説 [#s4224022]
%%WindowListenerで終了時に自分が最後のフレームの場合だけsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)するように設定しています。%% すべてのフレームに、setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)を設定して、Java VM 内で最後の表示可能なウィンドウが破棄されると、VM が終了するようになっています。

----
[[When DISPOSE_ON_CLOSE met WebStart>http://www.pushing-pixels.org/?p=232]]によると、Web Start で、実行する場合は、まだ、DISPOSE_ON_CLOSE ではなく、EXIT_ON_CLOSE を使っておいた方が良いようです。このため、上記のサンプルでは、解説とは異なり、コメントアウトしたコードで終了するようになっています。
[http://www.pushing-pixels.org/?p=232 When DISPOSE_ON_CLOSE met WebStart]によると、Web Start で実行する場合は DISPOSE_ON_CLOSE ではなく、EXIT_ON_CLOSE を使っておいた方が良いようです。このため、上記のサンプルでは、解説とは異なり、コメントアウトしたコードで終了するようになっています。

**参考リンク [#k9256100]
-[[AWT Threading Issues>http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/doc-files/AWTThreadIssues.html]]
-[[When DISPOSE_ON_CLOSE met WebStart>http://www.pushing-pixels.org/?p=232]]
-[http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/doc-files/AWTThreadIssues.html AWT Threading Issues]
-[http://www.pushing-pixels.org/?p=232 When DISPOSE_ON_CLOSE met WebStart]

**コメント [#if26eeb6]
#comment