比如在main方法里执行
JFrame frame=new JFrame();
frame.setVisible(true);
这样主方法返回后frame不就失去引用了吗,为什么又不会被当做垃圾回收呢?

解决方案 »

  1.   


    你不应该只看frame.setVisible(true);这一句代码
    你得关注以下new JFrame();发生了什么
    你还要知道有多线程的存在他既然显示出来了,就最少有一个线程还在运行,
    比如做一个简易画图程序,你画一下,他就显示一下,其实有一只画笔不断的操纵这个frame引用此时垃圾回收器有权利收回他吗?
      

  2.   

    main()方法最后添加一句:frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    右上角不是有一个红色X吗,你单击它就销毁了
      

  3.   

    你的意思可能想使用frame.dispose(),那你就看看关于它的说明吧
    释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。 通过随后对 pack 或 show 的调用重新构造本机资源,可以再次显示 Window 及其子组件。重新创建的 Window 及其子组件的状态在移除 Window 的点上与这些对象的状态将是一样的(不考虑这些操作之间的其他更改)。
    注:当 Java 虚拟机 (VM) 中最后的可显示窗口被移除后,虚拟机可能会终止。
        实际上就是说明了两层意思: 1.使用dispose()方法关闭窗体会释放该窗体的占用的部分资源,不过呢不是全部的,如上面说的,只是屏幕资源。2.使用dispose()方法关闭的窗体可以使用pack 或 show 方法恢复,并且可以恢复到dispose前的状态(呵呵~感觉好神奇的,一开始都不相信)
        关于上面的还有几点要说明的就是:1.如果dispose掉最后的窗体(程序启动就显示的那个),程序将终止。2.在JDK1.5中,show方法已经过时,被setVisible(boolean)方法代替,不过,使用dispose()和setVisible()方法,在表象上没有任何区别,它们的实质区别在于setVisible方法仅仅隐藏窗体,而dispose方法是关闭窗体,并释放一部分资源。一些示例:
    http://blog.sina.com.cn/s/blog_4afe685f0100c7x8.html