Moving Dot Applet

import java.awt.*;
import javax.swing.*;

/**
 * Class Moving Dot - Animates a dot moving on the screen
 * 
 * @author  Brian Brookwell
 * @version October 24, 2004
 */
public class MovingDot extends JApplet implements Runnable
{
	// instance variables 
	private double x, y, vx, vy;
	private boolean running;
	private Thread timer;

	 /**
	 * Called by the browser or applet viewer to inform this JApplet that it
	 * has been loaded into the system. It is always called before the first 
	 * time that the start method is called.
	 */
	public void init()
	{
		// this is a workaround for a security conflict with some browsers
		// including some versions of Netscape & Internet Explorer which do 
        // not allow access to the AWT system event queue which JApplets do 
        // on startup to check access. May not be necessary with your browser. 
		JRootPane rootPane = this.getRootPane();	
		rootPane.putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);
	
		// provide any initialisation necessary for your JApplet
		
		x = 250;
		y = 250;
		vx = 0.0;
		vy = -1.0;
	}

	/**
	 * Called by the browser or applet viewer to inform this JApplet that it 
	 * should start its execution. It is called after the init method and 
	 * each time the JApplet is revisited in a Web page. 
	 */
	public void start()
	{
		// provide any code requred to run each time 
		if (timer == null)
		{
		    timer = new Thread(this);
		    timer.start();
		    running = true;
		  }
	}

	/** 
	 * Called by the browser or applet viewer to inform this JApplet that
	 * it should stop its execution. It is called when the Web page that
	 * contains this JApplet has been replaced by another page, and also
	 * just before the JApplet is to be destroyed. 
	 */
	public void stop()
	{
		// provide any code that needs to be run when page
		// is replaced by another page or before JApplet is destroyed
		running = false;
	}

    public void run()
    {
        do
        {
            repaint();
            try
            {
                timer.sleep(10);
            } catch(InterruptedException e) {running = false;}
            
            // Sprite movement code goes here
            x = x + vx;
            y = y + vy;
        } while (running);
        
        timer = null;  // Destroy the timer thread
    }
            
	/**
	 * Paint method for applet.
	 * 
	 * @param  g   the Graphics object for this applet
	 */
	public void paint(Graphics g)
	{
		// simple text displayed on applet
		g.setColor(Color.white);
		g.fillRect(0, 0, 500, 500);
		g.setColor(Color.red);
		g.fillOval((int)x,(int)y,2,2);
	}

	/**
	 * Called by the browser or applet viewer to inform this JApplet that it
	 * is being reclaimed and that it should destroy any resources that it
	 * has allocated. The stop method will always be called before destroy. 
	 */
	public void destroy()
	{
		// provide code to be run when JApplet is about to be destroyed.
	}


	/**
	 * Returns information about this applet. 
	 * An applet should override this method to return a String containing 
	 * information about the author, version, and copyright of the JApplet.
	 *
	 * @return a String representation of information about this JApplet
	 */
	public String getAppletInfo()
	{
		// provide information about the applet
		return "Title:   \nAuthor:   \nA simple applet example description. ";
	}


	/**
	 * Returns parameter information about this JApplet. 
	 * Returns information about the parameters than are understood by this JApplet.
	 * An applet should override this method to return an array of Strings 
	 * describing these parameters. 
	 * Each element of the array should be a set of three Strings containing 
	 * the name, the type, and a description.
	 *
	 * @return a String[] representation of parameter information about this JApplet
	 */
	public String[][] getParameterInfo()
	{
		// provide parameter information about the applet
		String paramInfo[][] = {
				 {"firstParameter",	"1-10",	"description of first parameter"},
				 {"status", "boolean", "description of second parameter"},
				 {"images",   "url",	 "description of third parameter"}
		};
		return paramInfo;
	}
}