繁体   English   中英

JDialog setVisible(false) 与 dispose()

[英]JDialog setVisible(false) vs dispose()

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

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

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


请务必注意,当 Java 虚拟机 (VM) 中的最后一个可显示窗口被释放时,VM 可能会终止。 有关更多信息,请参阅AWT 线程问题

我仍然看不到between JDialog#dispose();任何区别between JDialog#dispose(); JDialog.setVisible(false) 在这里更多,它们中的每一个都可以被唤醒以供重用,并且是否被处置或可见都没有关系

我的观点是这个问题必须分成三个不同的领域

1)一些JFrameJDialogJWindow父级( exist only is is there JFrame ),然后最后一个必须关灯

2) JDialog没有父级

3) 还存在另一个JFrame, JDialog or JWindow , 那么最后一个必须关灯

  • 可以使用 --> Window[] wins = Window.getWindows();
  • 最后一个必须关灯 --> System.exit(0);
  • 我建议在所有可能的情况下,必须存在带有JFrame.EXIT_ON_CLOSE可见JFrame ,或者另一种方式可以使用System.exit(0);实现WindowsListener System.exit(0);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM