为什么我的JDialogs会泄漏?

时间:2009-05-08 13:21:26

标签: java swing

我有一个JFrame,我从它打开一个JDialog,从那个对话框打开另一个JDialog - menas我有3个窗口可见(JFrame,JDialog1,Jdialog2)。

当我关闭两个对话框并运行几次垃圾收集器时(来自netbeans profiler) 我可以看到JDialog2(从JDialog1打开的那个)是垃圾收集但是JDialog1(从JFrame打开)仍然挂在活动对象池中。

我每次都会创建新对象 - 所以经过一段时间后,我有一个OutOfMemoryError doue来记忆泄漏。

我是否必须以特殊方式处理JDialogs,以免泄漏?

顺便说一下 我做setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE) 在两个对话框上,

3 个答案:

答案 0 :(得分:9)

您是否在对话框中取消注册了所有听众(包括其中的任何组件)?

让听众注册可能是内存泄漏的主要来源。

答案 1 :(得分:4)

您的默认关闭操作是什么?来自java JDialog api:

  

默认情况下,该值设置为HIDE_ON_CLOSE

这意味着基本上当用户点击关闭时调用setVisible(false)或几乎等效的jDialog1.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE) 。你观察到的行为与此一致。

尝试

{{1}}

答案 2 :(得分:1)

要释放已分配的资源,您必须调用dispose方法。仅仅隐藏对话框是不够的。