问题描述:为什么关闭了nf窗口,而程序没结束 ,而关闭了f窗口,程序就结束了?System.exit(0)不是能终结java虚拟机么,关闭nf时,程序怎么没结束呢?package chapter11;
import java.awt.*;
import java.awt.event.*;
 
import javax.swing.*;
public class C11_7 implements ActionListener {
          public C11_7(){
           JFrame.setDefaultLookAndFeelDecorated(true);
           JFrame f=new JFrame("这是一个JFrame");               //窗口f
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //点击窗口关闭图标,关闭窗口
           Container cp=f.getContentPane();
           JButton bt1=new JButton("请点击");
           bt1.addActionListener(this);
           f.add(bt1);
           f.pack();    //调整窗口
           f.setVisible(true);
           
          }
          public void actionPerformed(ActionEvent e){
           JLabel lb=new JLabel("这是第二个窗口");
           JFrame.setDefaultLookAndFeelDecorated(true);
           JFrame nf=new JFrame();                        //窗口nf
           Container cp1=nf.getContentPane();
           nf.setTitle("这是一个新的JFrame");
           nf.setSize(180,100);
           nf.setVisible(true);
           cp1.add(lb);
           nf.addWindowListener(new WinLis());
           
          }
          
          public static void main(String[] arg){
         new C11_7();  
          }
          
          class WinLis extends WindowAdapter{
                public void windowsClosing(WindowEvent e){
           System.exit(0);             //为什么关闭了nf窗口,而程序没结束 ,而关闭了f窗口,程序就结束了?System.exit(0)不是能终结java虚拟机么,关闭nf时,程序怎么没结束呢?                  
                  }    
          }
}

解决方案 »

  1.   


    class WinLis extends WindowAdapter {
    @Override
    public void windowClosing(WindowEvent e) {
    System.exit(0); // 为什么关闭了nf窗口,而程序没结束
    // ,而关闭了f窗口,程序就结束了?System.exit(0)不是能终结java虚拟机么,关闭nf时,程序怎么没结束呢?
    }
    }你的方法名写错了,所以当单击nf窗口的关闭时,并没有执行System.exit(0);
      

  2.   

    因为你重写的windowClosing写错了,多写了个s。
      

  3.   

    通常如果是覆盖父类的方法的话,在前面加上@Override。这样当你的方法申明写错的时候,就会报错,给你提示的!
      

  4.   

    错误写法:
    class WinLis extends WindowAdapter {
    public void windowsClosing(WindowEvent e) {
    System.exit(0);
    }
    }

    正确写法:
    class WinLis extends WindowAdapter {
    @Override
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    }注意这个“s”的区别
    一个@Override注释可以帮助你检查有没有正确的重写方法