【问题标题】:How to set to null JDialog after it was setVisible(false)?setVisible(false)后如何设置为null JDialog?
【发布时间】:2013-08-09 13:29:24
【问题描述】:

我创建了JDialog 并将其设置为setUndecorated(true) - 它没有默认的“关闭”按钮。每次按下主 JFrame 上的某个按钮时,都会创建此 JDialog 类。此JDialog 对话框包含按钮“取消”,其中包含MouseListener

...
public void mouseClicked(MouseEvent e) {
    setVisible(false);
    // How to set this JDialog class to null - release the resources?
}
...

所以我想将此 JDialog 实例设置为 null - 因为每次按下 JFrame 上的按钮都会创建新的 JDialog 实例 - 这就是使用资源。我该如何解决这个问题?

编辑

我发现如果我每次在鼠标单击时创建新的JDialog 然后将其设置为可见 - JDialog 窗口在几毫秒内似乎没有得到很好的验证,之后就可以了。所以我认为更有效的是创建新的JDialog实例,然后每次在鼠标点击一些JFrame/JDialog按钮时设置它setVisible(true)setVisible(false)

【问题讨论】:

  • 是的,我想到了一个例子..(英语不是我的母语,所以有时可能是我的错误)。

标签: java swing jdialog


【解决方案1】:

您可以在 JDialog 上调用 dispose() 以释放资源,尽管我听说仍然会发生内存泄漏,尤其是在软引用和强引用方面。


请注意,您问题中的这句话令人困惑:

所以我想将此 JDialog 类设置为 null

您不能将类设置为空,只能设置实例变量。

【讨论】:

  • 不,我已经尝试过:setVisible(false);处置();然后 setVisible(true); - 对话框再次出现 - 所以这意味着该类仍然存在..
  • @ErnestasGruodis:只要您保留对该对象的可行引用,那么它仍然存在。除非没有可行的参考,否则不可能 gc 它。你不能像你正在做的那样对它进行测试,也不能以其他方式进行测试。
  • @ErnestasGruodis 如文档docs.oracle.com/javase/6/docs/api/java/awt/… 中所述,资源 已发布,但setVisible(true) 会重建对话框。
  • @Qwerky 确实感谢,现在已经回答了这个问题。设置可见(假);然后处置();够了。
  • @kleopatra:我对 textAction 问题的回答不满意,因为我想不出一种不轮询剪贴板状态的方法。
猜你喜欢
  • 2011-11-07
  • 2013-04-19
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多