我创建了一个应用程序,让用户可以选择完全打开应用程序的新生成。当用户这样做并关闭应用程序时,整个应用程序终止;不只是窗户。
我应该如何递归地生成一个应用程序,然后当用户退出JFrame spawn时;只杀死那个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 :(得分:3)
首先,您应该尝试JFrame.DISPOSE_ON_CLOSE
而不是JFrame.EXIT_ON_CLOSE
,因为无论是否有活动线程运行,EXIT_ON_CLOSE都会关闭应用程序。
如果仍有问题,应考虑引入实例计数器。更聪明地做出反应
另见discussion
答案 1 :(得分: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) {}
});