2016-01-02 2 views
0

Кнопка actionlistener. (Г является вызов метода для моего класса я называю его выше Run r= new Run();. Он устанавливает окно невидимым, но, когда он должен получить его обратно видна программа закрывается без каких-либо ошибок. Пробовал вместо setVisible(false);dispose(); но та же проблема.Почему это прекращает программу, когда предполагается, что главная страница будет отображаться на обратной стороне?

about.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      JFrame a=new JFrame("About"); 

      a.addWindowListener(new WindowListener(){ 
       @Override 
       public void windowActivated(WindowEvent arg0) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void windowClosed(WindowEvent arg0) { 


       } 

       @Override 
       public void windowClosing(WindowEvent arg0) { 
        r.gui.setVisible(true); 

       } 

       @Override 
       public void windowDeactivated(WindowEvent arg0) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void windowDeiconified(WindowEvent arg0) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void windowIconified(WindowEvent arg0) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void windowOpened(WindowEvent arg0) { 
        r.gui.setVisible(false); 

       } 
      }); 

      a.setSize(400, 400); 
      a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      a.setVisible(true); 
      a.setLayout(null); 

      JLabel lbl=new JLabel("This game was made by your lovely neighbourhood takisp22"); 
      lbl.setSize(500,50); 
      lbl.setLocation(0,0); 
      a.setLocation(100,50); 
      a.add(lbl); 
     } 
    }); 

Другой класс, который запускает программу:

import javax.swing.JFrame; 

public class Run { 
    public static GameAim gui=new GameAim(); 
    public static void main(String[] args){ 

     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.setTitle("Aim Training"); 
     gui.setSize(1280, 800); 
     gui.setVisible(true); 
     gui.setLocation(100,50); 
     gui.setResizable(false); 

     gui.openFile(); 
     gui.readFile(); 
     gui.closeFile(); 
    } 
} 
+0

Любое исключение/ошибка, которую вы видели или вы закрыли окно? – SMA

ответ

2

из-за этого:

gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

, когда вам закройте переменную gui JFrame, программа выйдет.

Не используйте это, но вместо этого используйте JFrame.DISPOSE_ON_CLOSE. Сказав это, прочитайте: The Use of Multiple JFrames, Good/Bad Practice?. Ваш пользователь не захочет, чтобы на них было загружено несколько окон. Вместо swap просматривает карту CardLayout - tutorial link.

В какой-то момент нам также необходимо обсудить зло вашего использования a.setLayout(null);.
;)

Смежные вопросы