Wednesday, May 4, 2011

ImageButton


Listing 1:
import java.awt.*;
import java.lang.ref.*;

public class ImageButton extends Button {
    private SoftReference imageReference=null;

    public ImageButton() {
super();
    }

    public void paint(Graphics g) {
Image image=null;
if (imageReference != null)  // null first time we paint
   image = (Image)imageReference.get();
if (image == null) {
   image = loadImage("Image name");
   imageReference = new SoftReference(image);
}
.
.
.
image = null;
    }

    public Image loadImage(String name) {
.
.
.
   }
}


}

Listing 2:    
  }
import java.lang.ref.*;
import java.util.Vector;

public class SoftCache {
    Vector vector=null;
    Thread remover;
    ReferenceQueue clearedRefs;

    public SoftCache() {
vector = new Vector();
clearedRefs = new ReferenceQueue();
// start thread to delete cleared references from the cache
remover = new Remover(clearedRefs,vector);
remover.start();
    }

    public void put(Object o) {
synchronized (vector) {
   vector.addElement(new SoftReference(o,clearedRefs));
}
    }

    public Object get() {
synchronized (vector) {
   if (vector.size() > 0) {
SoftReference sr = (SoftReference)vector.elementAt(0);
vector.remove(0);
return sr.get();
   }
}
return null;
    }

    private class Remover extends Thread {
ReferenceQueue refQ;
Vector cache;

public Remover (ReferenceQueue rq, Vector v) {
   super();
   refQ = rq;
   cache = v;
   setDaemon(true);
}

public void run() {
   try {
while (true) {
   Object o = refQ.remove();
   synchronized (cache) {
cache.removeElement(o);
System.out.println("Removing " + o);
   }
}
   } catch (InterruptedException e) { ; }
}
    }
}

No comments:

Post a Comment