日期:2014-05-20  浏览次数:20707 次

JFrame关闭问题????
package   org.eclipsebook.ch06;

import   java.awt.Color;
import   java.awt.Container;
import   java.awt.Graphics;
import   java.awt.event.WindowAdapter;
import   java.awt.event.WindowEvent;

import   javax.swing.JFrame;
import   javax.swing.JPanel;

public   class   Ch06_03   extends   JFrame   {
        Panel   p;
        public   Ch06_03(){
        super( "Swing   application ");
       
        Container   contentPane   =   getContentPane();
        p   =   new   Panel();
        contentPane.add(p);
        }
/**
  *   @param   args
  */
public   static   void   main(String[]   args)   {
//   TODO   Auto-generated   method   stub
                final   JFrame   f   =   new   Ch06_03();
               
                f.setBounds(100,   100,   300,   300);
                f.setVisible(true);
                f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                f.addWindowListener(new   WindowAdapter(){
                public   void   windowClosing(WindowEvent   e){
                System.exit(0);
                }
                });//上面的这种方式怎么还要来个WindowListener呢???
                    //与这个JFrame.EXIT_ON_CLOSE有什么不同么/这个没有加监听器的,
                //(我试了试把那个监听器注释掉后,仍可用,就是按下关闭后反应慢些)以前没认真想过的。
}

}
class   Panel   extends   JPanel{
Panel(){
setBackground(Color.white);
}
public   void   paintComponent(Graphics   g){
super.paintComponent(g);
g.drawString( "Hello   from   Eclipse ",   60,   100);
}
}


------解决方案--------------------
看下兩個內存的使用
------解决方案--------------------
去查一下java API吧!!
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
这个WindowAdapter中实现了windowClosing方法,也就是说在这个窗口将被关闭时,执行System.exit(0);
结束整个应用程序!
------解决方案--------------------
JFrame.EXIT_ON_CLOSE的作用是当按下“X”时,是整个窗口关闭,这是JFrame的可选的默认行为,
但加了adapter之后,作用就是在closing事件的时候就退出,并不是在closed事件才退出
所以时间延长了是很正常的行为