import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.applet.*; import java.util.*; public class Animator extends Applet implements Runnable, MouseListener { boolean running = false; int thisCell = 0; Vector cells = new Vector(); public void init() { this.addMouseListener(this); String nextCell; MediaTracker theTracker = new MediaTracker(this); for (int i = 0; (nextCell = this.getParameter("Cell" + i)) != null ; i++) { Image img = this.getImage(this.getDocumentBase(), nextCell); cells.addElement(img); theTracker.addImage(img, i); // start loading the image in a separate thread theTracker.checkID(i, true); } // wait for all images to finish loading try { theTracker.waitForAll(); } catch (InterruptedException e) { } } public void run() { for (thisCell=0; thisCell < cells.size(); thisCell++) { if (!running) return; // paint the cell this.repaint(); // sleep for a tenth of a second // i.e. play ten frames a second try { Thread.sleep(100); } catch (InterruptedException ie) { } } } public void stop() { this.running = false; } public void start() { this.running = true; Thread play = new Thread(this); play.start(); } 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 void mouseClicked(MouseEvent e) { if (running) { this.stop(); } else { this.start(); } } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }