基本Java Swing,如何退出和处理您的应用程序/ JFrame

使用这样的代码处理JFrame的好方法是什么? 我想处理Window出口和窗口关闭。

我知道我们不应该使用System.exit();

public class JavaCellularAutomataSquare { public static final String TITLE = "Cellular Automata - Squaring Example"; private int maxWidth = 600; private int maxHeight = 600; public void launch() { final JFrame frame = new JFrame(TITLE); frame.setLocation(20, 20); frame.setPreferredSize(new Dimension(maxWidth, maxHeight)); frame.setResizable(false); frame.setFocusable(true); final JPanel panel = new JPanel(); panel.setLocation(20, 20); panel.setVisible(true); panel.setPreferredSize(new Dimension(maxWidth, maxHeight)); panel.setFocusable(true); panel.setBackground(Color.white); // Panel setup, toggle visibility on frame frame.add(panel); frame.pack(); frame.setVisible(true); } } 

 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ClosingFrame extends JFrame { private JMenuBar MenuBar = new JMenuBar(); private JFrame frame = new JFrame(); private static final long serialVersionUID = 1L; private JMenu File = new JMenu("File"); private JMenuItem Exit = new JMenuItem("Exit"); public ClosingFrame() { File.add(Exit); MenuBar.add(File); Exit.addActionListener(new ExitListener()); WindowListener exitListener = new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { int confirm = JOptionPane.showOptionDialog(frame, "Are You Sure to Close this Application?", "Exit Confirmation", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); if (confirm == JOptionPane.YES_OPTION) { System.exit(0); } } }; frame.addWindowListener(exitListener); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setJMenuBar(MenuBar); frame.setPreferredSize(new Dimension(400, 300)); frame.setLocation(100, 100); frame.pack(); frame.setVisible(true); } private class ExitListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { int confirm = JOptionPane.showOptionDialog(frame, "Are You Sure to Close this Application?", "Exit Confirmation", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); if (confirm == JOptionPane.YES_OPTION) { System.exit(0); } } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ClosingFrame cf = new ClosingFrame(); } }); } } 

当窗口关闭时, JFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE)释放资源。 您可以在此处查看 Java教程中的一些其他操作。

如果您对选项很好奇,可以在WindowConstants界面中定义可以在方法中使用的可能参数。

如果您需要在关闭应用程序时执行某些操作,则可能需要关闭挂钩 。 看看这篇文章 。

 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

JFrame.setDefaultCloseOperation(int operation)

JFrame.EXIT_ON_CLOSE