Toggle your browser's Back and Forward buttons to compare the running applet to this code. |
Click here to run a fresh copy of the applet: AnimatorApplet1.html |
/** USE EXISTING JAVA CLASSES **/
import java.awt.*;
import java.applet.Applet;
/** EXTEND THE JAVA APPLET CLASS AND IMPLEMENT THE RUNNABLE INTERFACE **/
public class AnimatorApplet1 extends Applet implements Runnable
{int frameNumber = -1;
// Define and/or initialize some
int delay;
// AnimatorApplet1 class variables.
Thread animatorThread;
boolean frozen = true;
Font font=new Font("TimesRoman",Font.BOLD,30);
String framestr = "";
/** INITIALIZE THE APPLET **/
public void init()
{String str;
int fps = 10;
// Define the default fps (frames per second).
str = getParameter("fps");
// Possibly, get HTML string specifying the
try
// fps.
{if (str != null)
{fps =
Integer.parseInt(str);} // If possible, convert HTML fps to an
}
// integer.
catch (Exception e) {}
// In case the try caused something strange.
delay = (fps > 0) ? (1000/fps):
100; // Convert fps to the milisecond delay
}
// time between frames.
/** CLICK TO START OR STOP THE APPLET **/
public boolean mouseDown(Event e, int x, int y)
{if (frozen)
{frozen = false;
start();}
else
{frozen = true;
stop();}
return true;
}
Toggle your browser's Back and Forward buttons to compare the running applet to this code. |
Click here to run a fresh copy of the applet: AnimatorApplet1.html |
public void start()
{if (frozen) { }
// The animation is supposed to stay frozen.
else
// Otherwise, generate and/or start the
{if (animatorThread
== null) // animation thread. Apparently,
if run
{animatorThread
= new Thread(this);} // breaks after catching an exception,
animatorThread.start();
// the animatorThread though not null
}
// will still need to be restarted.
}
/** CREATE AND DISPLAY FRAMES OF THE ANIMATION THREAD **/
public void run()
{setBackground(Color.white);
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
// Set low priority.
long startTime = System.currentTimeMillis();
// Remember start time.
while (Thread.currentThread()
== animatorThread)
// The animation loop.
{frameNumber++;
// Advance the frame number.
framestr = "Frame " + frameNumber;
// Create the frame string.
repaint();
// Display the frame.
try
// Sleep for the delay period.
{startTime += delay;
Thread.sleep(Math.max(0,
startTime-System.currentTimeMillis()));
}
catch (InterruptedException e) {break;} // In case
the try caused
}
// something strange, exit
}
// the while loop.
Toggle your browser's Back and Forward buttons to compare the running applet to this code. |
Click here to run a fresh copy of the applet: AnimatorApplet1.html |
public void paint(Graphics g)
{g.setFont(font);
g.setColor(Color.blue);
g.drawString(framestr,140,110);
}
/** STOP THE ANIMATION THREAD **/
public void stop()
{animatorThread = null;}
// The user either clicked to stop or left the page,
}
// so wipe out the current thread.