如何删除类对象?

时间:2013-05-14 05:03:41

标签: java user-interface jframe

我有一个名为CounterGUI的对象。它创建了一个GUI。我在另一个班级创建它,比如MyProgram。

MyProgram创建CounterGUI对象后,如何删除对象?如果我这样做,请说:

CounterGUI first = new CounterGUI(); //displays the GUI
first = null;

我认为将对象设置为null会删除所有内容(包括GUI),但事实并非如此。如何完全删除它?

我不知道这是一个重复的问题,之前的答案是将其设置为null或新对象,但这在这里不起作用。

4 个答案:

答案 0 :(得分:1)

假设CounterGUI是java.awt.Window,那么:

  • 让窗口消失的方法是致电setVisible(false)

  • 将其与原始窗口完全断开的方法是致电dispose()

  • 一旦窗口disposed,使其无法访问(例如,通过将null分配给引用它的所有变量)将使其符合垃圾回收的条件。

null可见时,只需指定Window即可生效。可见的Window对象连接到各种阻止垃圾收集的东西。

答案 1 :(得分:1)

Java使用自动垃圾收集。当您将对象设置为null并且它是剩余的最后一个引用时,JVM将回收使用的内存。

但是,在您的情况下,可能是创建了一个线程(通常就是GUI),并且给出了对当前对象的引用。在这种情况下,将引用设置为null无效,因为其他东西仍然可以访问该对象。

为了正确关闭GUI,您必须调用close方法。对于JFrame,您可以尝试:

myGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

将在用户单击关闭按钮时关闭应用程序。如果您想通过程序控制关闭,那么您可以尝试:

private void closeItDown() {
  WindowEvent event = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
  Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event);
}

...并调用此方法。您不必将任何内容设置为null,JVM将在此时为您进行垃圾收集,也许。不保证,但可能在此时,也许在以后,或现在......或任何时候:)

答案 2 :(得分:0)

你希望消失GUI然后dispose()

您不必担心这一点,垃圾收集器会自动将其从内存中删除或

你可以自己调用

System.gc()

但这是不好的做法,也不能保证它肯定会被收集。

答案 3 :(得分:0)

  1. 通过将对象设置为null来删除对象使其符合垃圾回收的条件,JVM将负责删除所有这些对象。如果要强制运行垃圾收集器,可以发出System.gc()Runtime.gc (),但仍不能保证它将被收回JVM。您可以找到有关垃圾收集器如何工作的更多信息here

  2. 如果您要删除GUI窗口,可以使用dispose()方法。