我有一个名为CounterGUI的对象。它创建了一个GUI。我在另一个班级创建它,比如MyProgram。
MyProgram创建CounterGUI对象后,如何删除对象?如果我这样做,请说:
CounterGUI first = new CounterGUI(); //displays the GUI
first = null;
我认为将对象设置为null会删除所有内容(包括GUI),但事实并非如此。如何完全删除它?
我不知道这是一个重复的问题,之前的答案是将其设置为null或新对象,但这在这里不起作用。
答案 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)
答案 3 :(得分:0)