用Swing做一个Java桌面程序,如果主窗口是JFrame,它有很多子窗口(JFrame、JInternalFrame、JDialog等等),我在打开每个子窗体时用的java语句是类似以下代码的:
JDialog child1=new JDialog(parent,true);
child1.setVisible(true);
在child1里面有个关闭按钮closeButton,其事件响应代码是
this.setVisible(ture);
现在问题是:我把子窗体关闭后,下次重新打开该子窗体时,实际上是我new了一个JDialog,那么原来那个JDialog是不是还
在占用系统资源??(困惑1)
这个子窗体的关闭应该如何关闭才能保证系统资源的节约??(困惑2)(如果原来已经生成了改窗体,就把原来的现实出来,如果没有就new一个,最大程度的节约系统资源)

解决方案 »

  1.   

    如果你的窗口只需要一个的话可以public class MyJFrame extends JFrame {
        private static MyJFrame instance = null;
        public MyJFrame getInstance() {
            if (null != instance)
                return instance;
            else
                return new MyJFrame();
        }    protected MyJFrame() {
            super();
        }
        ......
    }随手写的,没编译
    再或者用个简单的方法,就是保存住你的dialog啊,frame的引用
    如果那个引用变量为空就new,不为空就setVisible(true)
      

  2.   

    呵呵,写错了public MyJFrame getInstance() {
            if (null == instance)
                instance = new MyJFrame();
            return instance;
        }
      

  3.   

    这都是JAVA的垃圾回收机制管理的,对于失去引用的对象会自己释放其内存,或者你可以手动调用函数释放其内存。Lz只要考虑是否实现单例即可
      

  4.   

    如果使用不是很频繁的话就直接抛弃子窗口的引用,下次用到的时候就在new一个出来。
    如果要非常频繁的使用,就保留它的引用,可以先不初始化,当需要的时候判断,如果有就直接
    拿来用,不存在就new出来,当需要隐藏的时候使用dispose方法。
      

  5.   



    查看内存消耗的话,我记得java自带了一个工具,好像是C:\Java\jdk1.6.0_05\bin\jconsole.exe
      

  6.   

    窗体new之后,都调用一下setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE),将默认的关闭操作设置为销毁窗体。
    或者把所有子窗体全部保存成全局变量,预先创建好,不要每次重新new.