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