我对Java编程比较陌生,可能错过了一些明显的东西,所以请耐心等待。
我正在创建一个程序,它使用Swing API和JDesktopPane来创建GUI。在主屏幕上是一个显示“新窗口”的按钮。用户单击它并实例化新的JInternalFrame并将其添加到JDesktopPane。如下所示,简化方法:
protected void createNewWindow(JPanel panel) {
JInternalFrame fooFrame = new JInternalFrame();
fooFrame.setContentPane(panel);
desktop.add(fooFrame);
}
我的问题是这个。假设用户单击该按钮十次。创建了十个JInternalFrame。所有这些都是方法变量,因此它们具有相同的名称。
这些旧的fooFrame变量会发生什么?垃圾收集器在任何阶段都会来破坏它们吗?我不会想到任何东西仍然提到他们。 有没有办法访问这些旧的fooFrames?假设我想在十分之四的fooFrame上更改JPanel上的文本颜色。有什么办法吗?
我知道这是一种非常愚蠢的方法,只需创建一个JInternalFrame实例变量(可能是一个数组)来实例化方法并添加到JDesktopPane中。我的问题更多是出于好奇而不是任何事情。
答案 0 :(得分:2)
这些旧的fooFrame变量会发生什么?垃圾 收藏家在任何阶段来摧毁他们?
您的对象desktop
持有对方法中创建的fooFrame
的引用,每个对象都有一个不同的引用,并由desktop
维护。一旦desktop
超出范围,他们就有资格进行垃圾收集。通常方法变量在控制出来之后有资格进行垃圾收集,因为它们是在方法范围内维护的,但在你的情况下,你有desktop
维护在类级别。