JDialog setVisible(false)vs dispose()

时间:2011-08-31 11:58:37

标签: java swing jdialog

在对话框中使用setVisible(false)并稍后重用它是否有意义,或者每次调用dispose()更安全并创建一个新的JDialog。 那么内存泄漏与setVisible(假)?

编辑: 我的问题不在于退出申请。有关将主框架作为父框架并在应用程序生命周期内打开和关闭的对话框的更多信息。例如。假设我的应用程序有大约10个对话框,每次打开它们时都会显示不同的数据。我应该重用实例并使用setVisible(),还是应该每次都创建一个新的Dialog并在关闭时处理它们。(/ p>

4 个答案:

答案 0 :(得分:24)

我建议使用dispose()释放资源并释放内存。如果要再次显示对话框,只需调用setVisible(true)


重要的是要注意,当Java虚拟机(VM)中的最后一个可显示窗口被丢弃时,VM可以终止。有关详细信息,请参阅AWT Threading Issues

答案 1 :(得分:1)

我仍然看不到任何差异between JDialog#dispose();JDialog.setVisible(false)更多here,每个都可以被唤醒以便重复使用,并且无论是处置还是可见,都无关紧要

我认为这个问题必须分成三个区别

1)有些JFrameJDialogJWindowexist only is is there JFrame)的父级,然后最后一个必须关闭灯光

2)without parent for JDialog

3)仍然存在另一个JFrame, JDialog or JWindow,然后最后一个必须关闭灯

  • 可通过使用 - >到达Window[] wins = Window.getWindows();
  • 最后一个必须要关灯 - > System.exit(0);
  • 我建议在所有可能的情况下,JFrameJFrame.EXIT_ON_CLOSE一起显示,或者使用WindowsListener实现System.exit(0);

答案 2 :(得分:0)

调用dispose()可释放与对话框关联的资源。您可以在dispose()之后保持对话。如果您担心周围有太多对话框,请使用WeakReference来保存引用。这将确保您不使用的对话只能在垃圾收集中存活,只要它们占用的空间不是必需的。

答案 3 :(得分:0)

当一个窗口被隐藏两次时,我遇到了不同的情况(例如,由于软件设计不当) 如果您处理已处理的窗口,VM 将挂起。 (Java 8) 如果你在一个已经不可见的窗口上设置了可见的 false 生活会继续......