当这个InternalFrame被关闭后,所有的占用的资源都会自动通过垃圾收集机制释放。如果你的view不再被其他的类使用的话,会自动回收掉的。

解决方案 »

  1.   

    楼上二位大概没搞明白我的问题
    如mercury1231所说 :“不再被其他的类使用的话”我现在的问题就是我用一个java.util.LinkedList保存了对那个view的引用
    如过我不释放这个引用JVM就决不可能把我的view当做垃圾我的问题是我该在什么时候释放这个view?
      

  2.   

    这个要取决于你的link list是在哪里的?如果你的link list并没有在internal frame关闭时被结束,那么应该view也不会被回收。你一定需要手动回收对应的view。事实上,这个可能不关垃圾回收的事情,这好像是两个方面的事情来的。就好比你根本没把垃圾丢出去,那么人家当然不可能自动帮你回收这个垃圾了。
      

  3.   

    为internal frame增加一个事件(就是在关闭时触发的事件,让它去删除LinkedList保存了对那个view的引用)
    217.否决器 VetoableChangeListenerinterframe_1.addVetoableChangeListener(new CloseListener(this));class CloseListener implements VetoableChangeListener { 
        private JFrame frame;    public CloseListener(JFrame f){
            this.frame =f;
        }
        
        public void vetoableChange(PropertyChangeEvent e) 
            throws PropertyVetoException {
            String name = e.getPropertyName();        if(name.equals(JInternalFrame.IS_CLOSED_PROPERTY)) {
                Component internalFrame = (Component)e.getSource();
                Boolean oldValue = (Boolean)e.getOldValue();
                Boolean newValue = (Boolean)e.getNewValue();            if(oldValue == Boolean.FALSE && newValue == Boolean.TRUE) {
                    int answer = JOptionPane.showConfirmDialog(
                        this.frame, // parentComponent
                        "Save Changes?", // message
                        "Unsaved Changes", // title
                        JOptionPane.YES_NO_CANCEL_OPTION);                 if(answer == JOptionPane.CANCEL_OPTION) {
                        throw new PropertyVetoException("close cancelled", e);                }
                }
            }
        }
    }