下面是一个录取的程序,点击菜单中的"录取"后选择子菜单"录取",会弹出一个子窗口,但是假如我把这个子窗口关掉的话,主窗口也部执行.郁闷  ...  
代码如下:  
====================================================  
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionPane;class z_Launch{

TextField z_tName;
     TextField z_tID ;
     TextField z_tTotal ;
     TextField z_tSports;
    
     Label     z_l1;//设置居中
     Label     z_l2 ;
     Label     z_l3 ;
    Label     z_l4;
   
    Button    z_bEnroll = new Button("录取");
    Button    z_bReset  = new Button("重置");
z_Launch(){

 ////////////////////////////////
     ///设置登陆框
    
     Frame z_Launch = new Frame("登陆");
    
     z_Launch.setLayout(new GridLayout(5,2));
    
     z_tName = new TextField();
        z_tID = new TextField();
      z_tTotal = new TextField();
     z_tSports = new TextField();
    
        z_l1 = new Label("用户名",Label.CENTER);//设置居中
         z_l2 = new Label("考号",Label.CENTER);
        z_l3 = new Label("综合成绩",Label.CENTER);
        z_l4 = new Label("体育成绩",Label.CENTER);
   
       z_bEnroll = new Button("录取");
        z_bReset  = new Button("重置");
   
    z_Launch.add(z_l1);
    z_Launch.add(z_tName);
   
z_Launch.add(z_l2);
    z_Launch.add(z_tID);
   
    z_Launch.add(z_l3);
    z_Launch.add(z_tTotal);
   
    z_Launch.add(z_l4);
    z_Launch.add(z_tSports);
   
    z_Launch.add(z_bEnroll);
    z_Launch.add(z_bReset);
   
z_Launch.pack();
     z_Launch.setBounds(100,200,300,200);
     z_Launch.setResizable(false);
     z_Launch.setVisible(true);
    
     z_Launch.addWindowListener(new WindowAdapter(){
     public void windowClosing(WindowEvent e){
     System.exit(0);
     }
     });
  }
}class z_intferface extends WindowAdapter implements ActionListener{     Frame f;
        MenuBar z_mb;
     Menu z_Enroll;
    Menu z_Stat;
     Menu z_Exit;
     TextArea z_t;
         //
   MenuItem z_mEnroll;
   MenuItem z_mStat;
    MenuItem z_mExit;
MenuItem z_mExit2;

z_intferface(){

   f = new Frame("登陆");
   z_mb = new MenuBar();
   z_t =new TextArea();
    

//
        z_Enroll = new Menu("录取");
     z_Stat =  new Menu("统计");
    z_Exit =   new Menu("退出");

//
    z_mEnroll=
new MenuItem("录取",new MenuShortcut(KeyEvent.VK_L));
     z_mStat=
new MenuItem("统计",new MenuShortcut(KeyEvent.VK_S));

        z_mExit=
new MenuItem("退出",new MenuShortcut(KeyEvent.VK_T));
       z_mExit2=
new MenuItem("退出",new MenuShortcut(KeyEvent.VK_T));

     //
    
     z_Enroll.add(z_mEnroll);
     z_Enroll.addSeparator();
     z_Enroll.add(z_mExit2);
    
     z_Stat.add(z_mStat);
    
      z_Exit.add(z_mExit);
     //
       
     z_mb.add(z_Enroll);
     z_mb.add(z_Stat);
     z_mb.add(z_Exit);
    
     f.setMenuBar(z_mb);
     f.add(z_t);
       
        z_Exit.addActionListener(this);
        z_mEnroll.addActionListener(this);
     z_mExit.addActionListener(this);
     z_mExit2.addActionListener(this);
     z_Stat.addActionListener(this);
    
   /* z_mStat.addActionListener(new   ActionListener()   {   
          public   void   actionPerformed(ActionEvent   ae)   {   
                  System.exit(0);   
          }   
     });
     z_mExit.addActionListener(new   ActionListener()   {   
          public   void   actionPerformed(ActionEvent   ae)   {   
                  System.exit(0);   
          }   
      });
      z_mExit2.addActionListener(new   ActionListener()   {   
          public   void   actionPerformed(ActionEvent   ae)   {   
                  System.exit(0);   
          }   
     });
     
      z_mEnroll.addActionListener(new   ActionListener()   {   
          public   void   actionPerformed(ActionEvent   ae)   {   
                 new z_Launch(); 
          }   
     });*/
    
      f.addWindowListener(new WindowAdapter(){
     public void windowClosing(WindowEvent e){
     System.exit(0);
     }
     });
    
      f.pack();
     f.setVisible(true);
     
    
        
  }
  
 public void actionPerformed(ActionEvent e){//有问题
 
  if(e.getSource() == z_Exit.getItem(0)){
     System.exit(0);
  }
  else if(e.getSource() == z_Enroll.getItem(0)){
   new z_Launch();
  
  }
  else if(e.getSource() == z_Enroll.getItem(2)){
    System.exit(2);
  }
  
  }
}  public class Z_LuQu {
    
    public static void main(String[] args) {
    
     // TODO, add your application code
    z_intferface z_i = new z_intferface();
    //z_Launch z_l = new z_Launch();
    }
}

解决方案 »

  1.   

    z_Launch.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    System.exit(0);
                }
            });===================谁让你在副窗口中加退出??
      

  2.   

    z_Launch.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
    //                System.exit(0);
                    z_Launch.dispose();
                }
            });这样改的话 z_Launch 要声明为final
      

  3.   

    解决了,只要把dispose()加里面就行了.