Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame对象准备进行垃圾收集的条件_Java_Swing_Garbage Collection_Jframe - Fatal编程技术网

Java JFrame对象准备进行垃圾收集的条件

Java JFrame对象准备进行垃圾收集的条件,java,swing,garbage-collection,jframe,Java,Swing,Garbage Collection,Jframe,从中,我了解到,即使程序员没有对对象的剩余引用(变得不可访问),它也可能没有准备好进行垃圾收集。一个无法访问但正在运行的线程尚未加入就是这样一个例子。我的问题是:还没有关闭的不可访问的JFrame(因此,仍然有一个工作且可见的GUI界面)是否准备好进行垃圾收集?如果答案是肯定的,这种行为会干扰或强制关闭GUI界面吗?例如,以下代码片段摘自《Java:A初学者指南》一书: 请注意,当SwingDemo构造函数返回时,无法再访问创建的JFrame对象 您的一个假设是错误的:JFrame是可访问的,一

从中,我了解到,即使程序员没有对对象的剩余引用(变得不可访问),它也可能没有准备好进行垃圾收集。一个无法访问但正在运行的
线程
尚未加入就是这样一个例子。我的问题是:还没有关闭的不可访问的
JFrame
(因此,仍然有一个工作且可见的GUI界面)是否准备好进行垃圾收集?如果答案是肯定的,这种行为会干扰或强制关闭GUI界面吗?例如,以下代码片段摘自《Java:A初学者指南》一书:


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

您的一个假设是错误的:JFrame是可访问的,一种方式是通过。此方法上的JVM:

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


除了没有人对它有强烈的引用之外,它的所有内部组件,调用
dispose
或将
defaultCloseOperation
设置为
dispose\u ON\u EXIT
,这将释放它的本机资源,这可能不会造成伤害。请参阅和。“我的问题是:是否有一个无法访问的JFrame尚未关闭(因此,仍然有一个工作且可见的GUI界面)准备进行垃圾收集?”-否。Swing工具包将保留它自己对框架的引用,直到它被关闭或处理更多。@SotiriosDelimanolis因此,答案在于
JFrame
的构造函数。
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);
  }
  ...
}