Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确隐藏JFrame_Java_Swing_Memory Leaks_Jframe - Fatal编程技术网

Java 如何正确隐藏JFrame

Java 如何正确隐藏JFrame,java,swing,memory-leaks,jframe,Java,Swing,Memory Leaks,Jframe,我有一个非常简单的JFrame窗口,其中包含一个按钮:No 在主功能中,我设置setVisible(true)myJFrame在No按钮侦听器中,我想关闭窗口,以便将可见性设置为false:setVisible(false)之后我执行系统退出(0)以防止程序多次运行时可能出现的内存泄漏 我有两个问题: 我真的需要系统退出(0)在上述情况下 如果我将此JFrame作为弹出窗口使用,我将无法真正使用系统。退出(0)

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

在主功能中,我设置
setVisible(true)
my
JFrame
No
按钮侦听器中,我想关闭窗口,以便将可见性设置为false:
setVisible(false)之后我执行
系统退出(0)以防止程序多次运行时可能出现的内存泄漏

我有两个问题:

  • 我真的需要
    系统退出(0)在上述情况下
  • 如果我将此
    JFrame
    作为
    弹出窗口
    使用,我将无法真正使用
    系统。退出(0)JFrame
    窗口中呢?(现在我只通过
    setVisible(false);
    关闭它,当我在程序执行过程中多次这样做时,程序会变得非常慢)
  • 使用

  • 是否有其他弹出式容器的真正原因

    • 使用

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

  • 将以上两点放在一起,使用
    CardLayout
    弹出
    JDialog
    ,并将父对象设置为
    JFrame
    ,从一张卡切换到另一张卡后,可能需要调用
    JDialog.pack()


  • 只需添加以下内容:
    JFrame.setDefaultCloseOperation(DISPOSE\u ON\u CLOSE)
    。 注意:
    JFrame
    的默认选项是
    HIDE\u ON\u CLOSE

  • setVisible
    将导致减速
  • dispose
    将导致减速
  • System.exit
    将关闭整个JVM
  • 因此,您应该重用单个
    JFrame
    JDialog


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

    您可以使用函数
    dispose()
    这将导致程序速度减慢,就像
    setVisible(false)一样
    @Doorknob根据
    JFrame
    的doc(),
    DISPOSE\u ON\u CLOSE
    :调用任何已注册的WindowListener对象后自动隐藏和处理框架,这与
    hide\u ON\u CLOSE
    DISPOSE并不意味着“释放资源”试着制作一个能制作成吨级
    JFrame
    s的程序,并对其进行处理,这样会大大降低速度。@Doorknob“试着制作一个能制作成吨级
    JFrame
    s的程序”吨数是多少?虽然我不太喜欢多个帧,但你不会注意到100个帧实例的速度会变慢(直到你关闭它们并意识到需要关闭100个实例中的每一个!)。嗯,即使我向上投票,现在我明白了……,请更改
    frame.removeAll()
    frame.getContentPane().removeAll()
    我看到有几次您可以删除
    根窗格
    ,然后只保留带有
    工具栏的半透明窗口
    ,带有
    边框
    ,任何内容都没有else@MarounMaroun有关卡片布局,请参见此处和+1 mKorbel。请参阅以获取示例