import java.net.*; import java.awt.*; import java.awt.image.*; import java.applet.*; import java.util.*; public class Animator extends Applet implements Runnable { boolean running = false; int thisCell = 0; Vector cells; Thread play; MediaTracker theTracker; public void init() { String nextCell; cells = new Vector(); theTracker = new MediaTracker(this); for (int i = 0; (nextCell = getParameter("Cell" + i)) != null ; i++) { Image img = getImage(getDocumentBase(), nextCell); cells.addElement(img); theTracker.addImage(img, i); } // start loading the images theTracker.checkAll(true); play = new Thread(this); play.start(); running = true; } public void run() { for (thisCell=0; thisCell < cells.size(); thisCell++) { try { // make sure this cell is loaded theTracker.waitForID(thisCell); // paint the cell repaint(); // sleep for a tenth of a second // i.e. play ten frames a second play.sleep(100); } catch (InterruptedException ie) { } } } public void stop() { play.suspend(); } public void start() { play.resume(); } public void paint(Graphics g) { g.drawImage((Image) cells.elementAt(thisCell), 0, 0, this); } // The convention is that a mouseClick starts // a stopped applet and stops a running applet. public boolean mouseUp(Event e, int x, int y) { if (running) { play.suspend(); running = false; } else { play.resume(); running = true; } return true; } }