如何正确隐藏JFrame

我有一个非常简单的JFrame窗口,其中包含一个按钮:

在main函数中我设置setVisible(true); 我的JFrameNo按钮监听器我要关闭窗口,所以我将可见性设置为false: setVisible(false); 然后我做System.exit(0); 为了防止多次运行程序时可能发生的内存泄漏。

我有两个问题:

  1. 我真的需要System.exit(0); 在上述情况下?
  2. 如果我将此JFrame作为popup窗口,我实际上无法使用System.exit(0); 因为这将终止整个程序。 那么如何正确关闭弹出窗口并保持在主JFrame窗口中呢? (现在我只用setVisible(false);关闭它setVisible(false);当我通过程序执行多次这样做时,程序变得很慢)。

  1. 使用CardLayout

  2. 如果有另一个弹出容器的真正原因

    • 使用JDialog与父级到JFrame ,使用setModal / ModalityTypes

    • 只创建一个JDialog,并通过getContentPane#removeAll()重用这一个JDialog

    • 使用JOptionPane进行简单的用户交互

  3. 把两者放在一起,在两点以上,使用CardLayout弹出JDialog与父级到JFrame ,注意从一张卡切换到另一张卡后可能需要调用JDialog.pack()

  1. setVisible会导致减速
  2. dispose会导致减速
  3. System.exit将关闭整个JVM

因此,您应该重用单个JFrameJDialog

在按钮的ActionListener ,调用frame.setVisible(false); 。 然后不要创建一个新的框架,而是做frame.setVisible(true); 。 如果你想改变帧的内容,有functionframe.getContentPane().removeAll();

只需添加: JFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE) 。 注意: JFrame的默认选项是HIDE_ON_CLOSE