如何正确隐藏JFrame

时间:2013-01-03 11:58:23

标签: java swing memory-leaks jframe

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

在主要功能中,我设置了setVisible(true);我的JFrame,在No按钮监听器中我要关闭窗口,因此我将可见性设置为false:setVisible(false);和之后我执行System.exit(0);以防止多次运行程序时可能发生的内存泄漏。

我有两个问题:

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

3 个答案:

答案 0 :(得分:9)

  1. 使用CardLayout

  2. 如果有其他弹出容器的真正原因

  3. 将两者放在一起,将两个点放在一起,使用CardLayout弹出JDialog,父级为JFrame,在从一张卡切换到另一张卡后,可能需要/致电JDialog.pack()

答案 1 :(得分:4)

  1. setVisible会导致速度放缓
  2. dispose会导致速度放缓
  3. System.exit将关闭整个JVM
  4. 因此,您应该重复使用单个JFrameJDialog

    在按钮的ActionListener中,调用frame.setVisible(false);。然后执行frame.setVisible(true);而不是创建新框架。如果要更改框架的内容,可以使用函数frame.getContentPane().removeAll();

答案 2 :(得分:3)

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