问题描述:为什么关闭了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时,程序怎么没结束呢?
}
}
}
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时,程序怎么没结束呢?
}
}
}
class WinLis extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0); // 为什么关闭了nf窗口,而程序没结束
// ,而关闭了f窗口,程序就结束了?System.exit(0)不是能终结java虚拟机么,关闭nf时,程序怎么没结束呢?
}
}你的方法名写错了,所以当单击nf窗口的关闭时,并没有执行System.exit(0);
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注释可以帮助你检查有没有正确的重写方法