0

我对 Java 编程比较陌生,可能错过了一些明显的东西,所以请耐心等待。

我正在创建一个使用带有 JDesktopPane 的 Swing API 来创建 GUI 的程序。主屏幕上有一个按钮,上面写着“新窗口”。用户单击它,一个新的 JInternalFrame 被实例化并添加到 JDesktopPane。如下,简化的方法:

protected void createNewWindow(JPanel panel) {

    JInternalFrame fooFrame = new JInternalFrame();
    fooFrame.setContentPane(panel);
    desktop.add(fooFrame);
}

我的问题是这个。假设用户点击按钮十次。创建了十个 JInternalFrames。它们都是方法变量,因此它们具有相同的名称。

这些旧的 fooFrame 变量会发生什么?垃圾收集器会在任何阶段来销毁它们吗?我不会想到任何东西仍然持有对他们的引用。有什么方法可以访问这些旧的 fooFrames 吗?假设我想在十个 fooFrames 中的第四个上更改 JPanel 上的文本颜色。有什么办法可以做到这一点?

我知道这是一种非常愚蠢的做事方式,只需创建一个 JInternalFrame 实例变量(可能是一个数组)即可在方法中实例化并添加到 JDesktopPane 中,这很简单。我的问题更多是出于好奇。

4

1 回答 1

2

这些旧的 fooFrame 变量会发生什么?垃圾收集器会在任何阶段来销毁它们吗?

您的对象desktop持有对fooFrame方法中创建的引用,它们中的每一个都将具有不同的引用,并将由desktop. 一旦desktop超出范围,他们将有资格进行垃圾收集。通常方法变量在控制离开方法后有资格进行垃圾收集,因为它们在方法范围内维护,但在您的情况下,您拥有desktop在类级别维护的。

于 2013-04-25T06:28:33.140 回答