据说Java有很好的内存回收功能,不知为何,还是出现了严重的内存泄漏问题,请高手帮助解决。
如下是我的画图程序:
public void paint(Graphics g){
Image bimg = createImage(800,600);
        Graphics gimg = bimg.getGraphics();
gimg.drawImage("aa.jpg", 0, 0, 800, 600,null); // aa.jpg is 80600
g.drawLine(100,100,200,200)
        imageLabel.setIcon(new ImageIcon(bimg.getScaledInstance((int)(800*xscale), (int)(600*yscale),Image.SCALE_DEFAULT)));  //imageLabel is a JLabel
gimg.dispose();//release graphics resource }为了实现实时画图,我在单独的进程里面实时的repaint()class Ticker extends Thread {
 
 public Ticker() {
 start();
 
 }
 public synchronized void run() {
   while (true) {
   try {
       sleep(200);
     } catch(InterruptedException e) {
       System.err.println("Interrupted");
     }
   if (operation==1){
   
   repaint();
  
       }

   }
}
}随后就每2秒内存增加2M左右,运行时间稍长,电脑就几乎停止响应了。
感觉好像是由于PAINT里面不断的new对象出现导致的,但是不知道怎么处理,请高手帮忙!
程序的目的是想实现双缓存,在画面外先将图画到bimg的内存中。

解决方案 »

  1.   

    如果你使用的jdk版本在6.0下,这种情况应属于线程阻塞导致的资源无法回收(6.0可以用swing  worker 解决该问题)
    帮你好找了找那个类...,你可以查看sun的swing多线程编程的教程:
    http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html
      

  2.   

    谢谢哥们的帮忙,人气真的不旺啊。不过现在问题已经解决,揭帖给分。
    我用了另外的方法:
    gimg.clearRect(....)实时刷新画图的内存缓存,只初始化一个实例,然后调用imagelabel的updateUI.就能实时显示图象了。