【问题标题】:Conditions for a JFrame object to be ready for garbage collectionJFrame 对象准备好进行垃圾回收的条件
【发布时间】:2015-11-05 20:42:35
【问题描述】:

this thread,我了解到,即使程序员没有对对象的剩余引用(变得无法访问),它也可能还没有准备好进行垃圾回收。一个无法访问但正在运行但尚未加入的Thread 就是这样一个例子。我的问题是:一个无法访问的JFrame 是否还没有关闭(因此,仍然有一个工作和可见的 GUI 界面)准备好进行垃圾收集?如果答案是肯定的,这种行为是否会破坏或强制关闭 GUI 界面?例如,以下代码 sn-p 摘自Java: A Beginner's Guide一书:

class SwingDemo {
  SwingDemo() {
    JFrame jfrm = new JFrame("A Simple Swing Application");
    jfrm.setSize(275, 100);
    jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JLabel jlab = new JLabel(" Swing defines the modern Java GUI.");
    jfrm.add(jlab);
    jfrm.setVisible(true);
  }
  ...
}

请注意,当SwingDemo 构造函数返回时,创建的JFrame 对象不再可访问。

【问题讨论】:

  • 除了没有人强烈引用它的所有内部组件外,调用dispose 或将defaultCloseOperation 设置为DISPOSE_ON_EXIT 这将释放它的本机资源可能不会受到伤害。
  • thisthis
  • “我的问题是:一个无法访问的 JFrame 是否还没有关闭(因此,仍然有一个工作和可见的 GUI 界面)准备好进行垃圾收集?” -不会。Swing 工具包将保持它自己对框架的引用,直到它被关闭或释放
  • 更多here.
  • @SotiriosDelimanolis 所以,答案在于JFrame的构造函数。

标签: java swing garbage-collection jframe


【解决方案1】:

您的一个假设是错误的:JFrame 可达的,一种方法是通过Windows#getWindows()。该方法上的JVM:

返回由该应用程序创建的所有 Windows 的数组,包括所有的和无主的。如果从小程序调用,则该数组仅包括该小程序可访问的 Windows。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多