当前位置: 代码迷 >> J2SE >> 小弟我做的swing软件里有很多JLabel显示几秒就不显示了如何才能把内存清掉
  详细解决方案

小弟我做的swing软件里有很多JLabel显示几秒就不显示了如何才能把内存清掉

热度:110   发布时间:2016-04-23 20:28:10.0
我做的swing软件里有很多JLabel显示几秒就不显示了怎么才能把内存清掉?
我的程序里有很多JLabel 定时显示几秒钟,然后就不再用了,用C的话可以析构,用java会不会大量占据内存?
我是否需要自己把他们加到一个链表里,然后时不时去清空,还是用完可以不管?


还有showMessageDialog

public class TimedLabel {
 
        JLabel jl = new JLabel();
        public TimedLabel(JPanel jp,int locx,int locy,String alt,int seconds) 
        {
            jl.setText(alt);
            jl.setLocation(locx,locy);
            jl.setSize(alt.length()*10,20);
            jl.setVisible(true);
            jp.add(jl);
            Timer timer = new Timer(seconds*1000, new ActionListener() {
 
                @Override
                public void actionPerformed(ActionEvent e) {
                jl.setVisible(false);
                }
                });
            timer.start();   
        }
}

import javax.swing.JOptionPane;

public class Jmsgbox extends JOptionPane{
public Jmsgbox(String messageText)
{
showMessageDialog(this, messageText);
}
}

------解决方案--------------------
我觉得可以不用管
------解决方案--------------------
把这些jl从jp里面remove掉,就可以不用管了,如果在别的地方也没有被引用,会被回收。如果只是设置setVisible(false),那么不会被回收。
------解决方案--------------------
不需要管吧,自己会清理的
------解决方案--------------------
可以考虑重复利用这些label,就是享元模式,这样可以降低内存的浪费,不必要的对象创建,提高效率。
------解决方案--------------------
你用的是jl.setVisible(false),这个对象一直会存在的,只是影藏了而已。如果不需要了你要remove掉。