2010-03-06 1 views
3

Я создал приложение, которое дает пользователю возможность полностью открыть новый икру приложения. Когда пользователь делает это и закрывает приложение, все приложение завершается; а не только окно.Рекурсия вызывает выход для выхода из всех JFrames (прекращает приложение)

Как следует искать рекурсивно нереста приложения, а затем, когда пользователь выходит из икры JFrame; убивая только JFrame, а не весь экземпляр?

Вот соответствующий код:

[...] 
JMenuItem newMenuItem = new JMenuItem ("New"); 
newMenuItem.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
{   
    new MainWindow(); 
    } 
}); 
fileMenu.add(newMenuItem); 

[....] 

JMenuItem exit = new JMenuItem("Exit"); 
exit.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
}); 
fileMenu.add(exit); 
[...] 

ответ

0

Я полностью удалил код frame.setDefaultCloserOperation(JFrame.EXIT_ON_CLOSE);.

Я изменил его на DISPOSE_ON_CLOSE, и все еще проблема все еще продолжалась. Я закончил создание windowEvent и добавил: frame.dispose(); и поведение - это то, что я хотел.

Вот код:

   frame.addWindowListener(new WindowListener() { 
       public void windowClosing(WindowEvent e) { 
        //Allows for multiple instances and properly closing 
        //only one of the Frames instead of all of them 
        frame.dispose(); 
       } 
       public void windowOpened(WindowEvent e) {}    
       public void windowClosed(WindowEvent e) {} 
       public void windowIconified(WindowEvent e) {} 
       public void windowDeiconified(WindowEvent e) {} 
       public void windowActivated(WindowEvent e) {} 
       public void windowDeactivated(WindowEvent e) {} 
      }); 
3

Во-первых, вы должны попробовать JFrame.DISPOSE_ON_CLOSE вместо JFrame.EXIT_ON_CLOSE, потому что EXIT_ON_CLOSE закрывает работу приложения, независимо от того, есть ли активные потоки, работающие или нет. Если у вас все еще есть проблемы, вы должны рассмотреть возможность введения счетчика экземпляра. Чтобы ответить умнее См. Также discussion

+0

Я попытался DISPOSE_ON_CLOSE раньше, но все равно не поможет, и я просто попытался это, чтобы быть уверенным, и до сих пор эта проблема присутствует. – 2010-03-06 23:09:03