<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FJ2ME%2FTimer</id>
		<title>Java/J2ME/Timer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FJ2ME%2FTimer"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/J2ME/Timer&amp;action=history"/>
		<updated>2026-04-22T01:59:42Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/J2ME/Timer&amp;diff=7263&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/J2ME/Timer&amp;diff=7263&amp;oldid=prev"/>
				<updated>2010-06-01T06:37:45Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:37, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/J2ME/Timer&amp;diff=7262&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/J2ME/Timer&amp;diff=7262&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A simple class that shows an example of using a Timer and a TimerTask. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2000-2001 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 */&lt;br /&gt;
import java.lang.*;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
/**&lt;br /&gt;
 * A simple class that shows an example of using a Timer and&lt;br /&gt;
 * a TimerTask.&lt;br /&gt;
 *&lt;br /&gt;
 * This MIDlet creates two gauges. One gauge gaugeOne,&lt;br /&gt;
 * sets elements from low to high. The other, gaugeTwo,&lt;br /&gt;
 * set elements from high to low. In effect, this has&lt;br /&gt;
 * gaugeOne &amp;quot;going up&amp;quot;, and gaugeTwo &amp;quot;going down.&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * The two timers fire at different intervals.&lt;br /&gt;
 *&lt;br /&gt;
 * There are two commands on our form:&lt;br /&gt;
 * &lt;br /&gt;
 * OK: toggles whether the times are active or not.&lt;br /&gt;
 * EXIT: exits the MIDlet.&lt;br /&gt;
 */&lt;br /&gt;
public class TimerMIDlet extends MIDlet implements CommandListener {&lt;br /&gt;
    // number of elements in gauge&lt;br /&gt;
    final private static int GAUGE_MAX = 10;&lt;br /&gt;
    private boolean timersRunning; // tracks state of timers&lt;br /&gt;
    private Display myDisplay;     // handle to the display&lt;br /&gt;
    private Gauge gaugeOne;        // &amp;quot;going up&amp;quot; gauge&lt;br /&gt;
    private Gauge gaugeTwo;        // &amp;quot;going down&amp;quot; gauge&lt;br /&gt;
    private Form myScreen;         // form on which to &lt;br /&gt;
                                   // place gauges&lt;br /&gt;
    private Command cmdOK;         // OK command&lt;br /&gt;
    private Command cmdExit;       // EXIT command&lt;br /&gt;
    private Timer timer;&lt;br /&gt;
    private MyTimerTask timerTaskOne;&lt;br /&gt;
    private MyTimerTask timerTaskTwo;&lt;br /&gt;
    /**&lt;br /&gt;
     * Internal class that provides a TimerTask.&lt;br /&gt;
     */&lt;br /&gt;
    private class MyTimerTask extends TimerTask {&lt;br /&gt;
        private Gauge myGauge; // reference to gauge&lt;br /&gt;
        private boolean goUp;  // if true, go up&lt;br /&gt;
        private int num;       // number of times called&lt;br /&gt;
        /**&lt;br /&gt;
         * Public constructor: stores &amp;quot;direction&amp;quot; and a reference to&lt;br /&gt;
         * a gauge.&lt;br /&gt;
         */&lt;br /&gt;
        public MyTimerTask(Gauge g, boolean up) {&lt;br /&gt;
            myGauge = g;&lt;br /&gt;
            goUp = up;&lt;br /&gt;
        }&lt;br /&gt;
        /**&lt;br /&gt;
         * As the timer fires, this method is invoked. Set gauge&lt;br /&gt;
         * based on goUp&lt;br /&gt;
         */&lt;br /&gt;
        public void run() {&lt;br /&gt;
            num++;&lt;br /&gt;
            myGauge.setValue(goUp ?&lt;br /&gt;
                             GAUGE_MAX -(num % GAUGE_MAX) :&lt;br /&gt;
                             num % GAUGE_MAX);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Public constructor: gets handle to display,&lt;br /&gt;
     * creates form, gauges, and commands.&lt;br /&gt;
     */&lt;br /&gt;
    public TimerMIDlet() {&lt;br /&gt;
        myDisplay = Display.getDisplay(this);&lt;br /&gt;
        myScreen = new Form(&amp;quot;TimerMIDlet&amp;quot;);&lt;br /&gt;
        gaugeOne = new Gauge(&amp;quot;Up Gauge&amp;quot;,&lt;br /&gt;
                             false,&lt;br /&gt;
                             GAUGE_MAX,&lt;br /&gt;
                             0);&lt;br /&gt;
        myScreen.append(gaugeOne);&lt;br /&gt;
        gaugeTwo = new Gauge(&amp;quot;Down Gauge&amp;quot;,&lt;br /&gt;
                             false,&lt;br /&gt;
                             GAUGE_MAX,&lt;br /&gt;
                             GAUGE_MAX);&lt;br /&gt;
        myScreen.append(gaugeTwo);&lt;br /&gt;
        cmdOK = new Command(&amp;quot;OK&amp;quot;, Command.OK, 1);&lt;br /&gt;
        cmdExit = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
        myScreen.addCommand(cmdOK);&lt;br /&gt;
        myScreen.addCommand(cmdExit);&lt;br /&gt;
        myScreen.setCommandListener(this);&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Changes the state of timers to/from active to/from&lt;br /&gt;
     * not-active.&lt;br /&gt;
     */&lt;br /&gt;
    private void flipFlop() {&lt;br /&gt;
        if (timersRunning) {&lt;br /&gt;
            timerTaskOne.cancel();&lt;br /&gt;
            timerTaskTwo.cancel();&lt;br /&gt;
            timer.cancel();&lt;br /&gt;
            timersRunning = false;&lt;br /&gt;
        } else {&lt;br /&gt;
            timer = new Timer();&lt;br /&gt;
            timerTaskOne = new MyTimerTask(gaugeOne, false);&lt;br /&gt;
            timerTaskTwo = new MyTimerTask(gaugeTwo, true);&lt;br /&gt;
            timer.schedule(timerTaskOne, 0, 1000);&lt;br /&gt;
            timer.schedule(timerTaskTwo, 0, 1500);&lt;br /&gt;
            timersRunning = true;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Called by the system to start our MIDlet.&lt;br /&gt;
    * @exception MIDletStateChangeException&lt;br /&gt;
     */&lt;br /&gt;
    protected void startApp() throws MIDletStateChangeException {&lt;br /&gt;
        myDisplay.setCurrent(myScreen);&lt;br /&gt;
        flipFlop();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Called by the system to pause our MIDlet.&lt;br /&gt;
     * No actions required by our MIDLet.&lt;br /&gt;
     */&lt;br /&gt;
    protected void pauseApp() {}&lt;br /&gt;
    /**&lt;br /&gt;
     * Called by the system to end our MIDlet.&lt;br /&gt;
     * No actions required by our MIDLet.&lt;br /&gt;
     */&lt;br /&gt;
    protected void destroyApp(boolean unconditional) {}&lt;br /&gt;
    /***&lt;br /&gt;
     * Respond to command selections. Process two commands:&lt;br /&gt;
     * &lt;br /&gt;
     * OK: flip flop the timers to/from active&lt;br /&gt;
     * EXIT: exit this MIDlet&lt;br /&gt;
     * &lt;br /&gt;
     */&lt;br /&gt;
    public void commandAction(Command c, Displayable d) {&lt;br /&gt;
        if (c == cmdOK) {&lt;br /&gt;
            flipFlop();&lt;br /&gt;
        } else if (c == cmdExit) {&lt;br /&gt;
            destroyApp(false);&lt;br /&gt;
            notifyDestroyed();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Demonstrate simple animation using a Timer and TimerTask ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*--------------------------------------------------&lt;br /&gt;
* Animation.java&lt;br /&gt;
*&lt;br /&gt;
* Demonstrate simple animation using&lt;br /&gt;
* a Timer and TimerTask&lt;br /&gt;
*&lt;br /&gt;
* Example from the book:     Core J2ME Technology&lt;br /&gt;
* Copyright John W. Muchow   http://www.CoreJ2ME.ru&lt;br /&gt;
* You may use/modify for any non-commercial purpose&lt;br /&gt;
*-------------------------------------------------*/  &lt;br /&gt;
import java.util.*;&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
public class Animation extends MIDlet&lt;br /&gt;
{&lt;br /&gt;
  private Display  display;       // The display&lt;br /&gt;
  private AnimationCanvas canvas; // Canvas &lt;br /&gt;
  private Timer tm;               // Timer&lt;br /&gt;
  private AnimateTimerTask tt;    // Task&lt;br /&gt;
 &lt;br /&gt;
  public Animation()&lt;br /&gt;
  {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
    canvas  = new AnimationCanvas(this);&lt;br /&gt;
    // Create task that fires off every 1/10 second    &lt;br /&gt;
    tm = new Timer();&lt;br /&gt;
    tt = new AnimateTimerTask(canvas);&lt;br /&gt;
    tm.schedule(tt, 0, 100);    &lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  protected void startApp()&lt;br /&gt;
  {&lt;br /&gt;
    display.setCurrent(canvas);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  protected void pauseApp()&lt;br /&gt;
  { }&lt;br /&gt;
  protected void destroyApp(boolean unconditional)&lt;br /&gt;
  { }&lt;br /&gt;
 &lt;br /&gt;
  public void exitMIDlet()&lt;br /&gt;
  {&lt;br /&gt;
    destroyApp(true);&lt;br /&gt;
    notifyDestroyed();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*--------------------------------------------------&lt;br /&gt;
* AnimateTimerTask.java&lt;br /&gt;
*&lt;br /&gt;
* Change location of bouncing ball on the canvas&lt;br /&gt;
*&lt;br /&gt;
* Example from the book:     Core J2ME Technology&lt;br /&gt;
* Copyright John W. Muchow   http://www.CoreJ2ME.ru&lt;br /&gt;
* You may use/modify for any non-commercial purpose&lt;br /&gt;
*-------------------------------------------------*/  &lt;br /&gt;
&lt;br /&gt;
class AnimateTimerTask extends TimerTask&lt;br /&gt;
{&lt;br /&gt;
  private AnimationCanvas canvas;&lt;br /&gt;
  &lt;br /&gt;
  public AnimateTimerTask(AnimationCanvas canvas)&lt;br /&gt;
  {&lt;br /&gt;
    this.canvas = canvas;&lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Determine next location of the ball.&lt;br /&gt;
  * If the ball reaches any edge, change the color&lt;br /&gt;
  * Track how many times we&amp;quot;ve switced directions&lt;br /&gt;
  *-------------------------------------------------*/  &lt;br /&gt;
  public final void run()&lt;br /&gt;
  {&lt;br /&gt;
    // If past the right edge or prior to left edge...&lt;br /&gt;
    if ((canvas.x_loc + canvas.radius +  canvas.x_dir &amp;gt; canvas.getWidth()) ||&lt;br /&gt;
        (canvas.x_loc - canvas.radius +  canvas.x_dir &amp;lt; 0))&lt;br /&gt;
    {                &lt;br /&gt;
      canvas.x_dir = -canvas.x_dir;&lt;br /&gt;
      canvas.changeColor();&lt;br /&gt;
      canvas.directionChanged++;&lt;br /&gt;
    }&lt;br /&gt;
    // If past the bottom or before the top...&lt;br /&gt;
    if ((canvas.y_loc + canvas.radius +  canvas.y_dir &amp;gt; canvas.getHeight()) ||&lt;br /&gt;
        (canvas.y_loc - canvas.radius + canvas.y_dir &amp;lt; 0))      &lt;br /&gt;
    {          &lt;br /&gt;
      canvas.y_dir = -canvas.y_dir;&lt;br /&gt;
      canvas.changeColor();&lt;br /&gt;
      canvas.directionChanged++;      &lt;br /&gt;
    }&lt;br /&gt;
    // Update the new x and y locations&lt;br /&gt;
    canvas.x_loc += canvas.x_dir;&lt;br /&gt;
    canvas.y_loc += canvas.y_dir;&lt;br /&gt;
 &lt;br /&gt;
    canvas.repaint();            &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*--------------------------------------------------&lt;br /&gt;
* AnimationCanvas.java&lt;br /&gt;
*&lt;br /&gt;
* Show a ball that bounces around on a canvas &lt;br /&gt;
* Each time we hit a wall we change the ball color&lt;br /&gt;
* We also clear the screen after &amp;quot;n&amp;quot; number of&lt;br /&gt;
* hits against the wall&lt;br /&gt;
* The &amp;quot;left&amp;quot; and &amp;quot;right&amp;quot; keys change the ball size&lt;br /&gt;
* The &amp;quot;Fire&amp;quot; key resets the display, however,&lt;br /&gt;
* it leaves the ball size the same.&lt;br /&gt;
*&lt;br /&gt;
* Example from the book:     Core J2ME Technology&lt;br /&gt;
* Copyright John W. Muchow   http://www.CoreJ2ME.ru&lt;br /&gt;
* You may use/modify for any non-commercial purpose&lt;br /&gt;
*-------------------------------------------------*/&lt;br /&gt;
class AnimationCanvas extends Canvas implements CommandListener&lt;br /&gt;
{&lt;br /&gt;
  private Animation midlet;         // Main midlet&lt;br /&gt;
  private Command cmExit;          // Exit midlet&lt;br /&gt;
  private int    keyFire,           // Reset ball            &lt;br /&gt;
                 keyRight,          // Increase ball radius&lt;br /&gt;
                 keyLeft;           // Decrease ball radius&lt;br /&gt;
  private boolean clearBackground = false; // Clear background&lt;br /&gt;
  private Random random;            // Random number&lt;br /&gt;
  int x_loc,                        // Current x &amp;amp; y locations&lt;br /&gt;
      y_loc,                        &lt;br /&gt;
      radius,                       // Ball radius&lt;br /&gt;
      red,                          // rgb colors&lt;br /&gt;
      green,                       &lt;br /&gt;
      blue,                       &lt;br /&gt;
      x_dir,                // Next x &amp;amp; y positions of ball&lt;br /&gt;
      y_dir,                &lt;br /&gt;
      start_x,              // Where ball starts &lt;br /&gt;
      start_y,&lt;br /&gt;
      directionChanged = 0; // How many times we&amp;quot;ve hit a wall&lt;br /&gt;
  private static final int MAX_CHANGES = 50;&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Constructor&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  public AnimationCanvas(Animation midlet)&lt;br /&gt;
  {&lt;br /&gt;
    // Save reference to main midlet&lt;br /&gt;
    this.midlet = midlet;&lt;br /&gt;
    random = new java.util.Random();&lt;br /&gt;
    &lt;br /&gt;
    // Determine starting location and direction of ball&lt;br /&gt;
    init();&lt;br /&gt;
    radius = 7;&lt;br /&gt;
    &lt;br /&gt;
    // Create exit command and &amp;quot;Fire&amp;quot; key&lt;br /&gt;
    cmExit = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
    keyFire =  getKeyCode(FIRE);&lt;br /&gt;
    keyRight = getKeyCode(RIGHT);&lt;br /&gt;
    keyLeft = getKeyCode(LEFT);&lt;br /&gt;
    &lt;br /&gt;
    addCommand(cmExit);&lt;br /&gt;
    setCommandListener(this);&lt;br /&gt;
  } &lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Paint a new ball, clearing the screen as asked&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  protected void paint(Graphics g)&lt;br /&gt;
  {&lt;br /&gt;
    // Max edge hits, reset everything&lt;br /&gt;
    if (directionChanged &amp;gt; MAX_CHANGES)&lt;br /&gt;
      init();&lt;br /&gt;
    &lt;br /&gt;
    // Clear the background&lt;br /&gt;
    if (clearBackground)&lt;br /&gt;
    {&lt;br /&gt;
      g.setColor(255, 255, 255);&lt;br /&gt;
      g.fillRect(0, 0, getWidth(), getHeight());&lt;br /&gt;
      clearBackground = !clearBackground;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Set color and draw another ball&lt;br /&gt;
    g.setColor(red, green, blue);                    &lt;br /&gt;
    g.fillArc( x_loc, y_loc, radius, radius, 0, 360);&lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Initialize starting location and direction of ball&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  private void init()&lt;br /&gt;
  {&lt;br /&gt;
    // Start close to the middle&lt;br /&gt;
    x_loc = getWidth() / 2;&lt;br /&gt;
    y_loc = getHeight() / 2;      &lt;br /&gt;
    // The direction the ball is heading&lt;br /&gt;
    x_dir = (random.nextInt() % 10);&lt;br /&gt;
    if (x_dir == 0)  x_dir = 1;&lt;br /&gt;
    &lt;br /&gt;
    y_dir = (random.nextInt() % 10);&lt;br /&gt;
    if (y_dir == 0)  y_dir = 1;&lt;br /&gt;
    directionChanged = 0;    &lt;br /&gt;
    clearBackground = true;      &lt;br /&gt;
    changeColor();      &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Change the colors.&lt;br /&gt;
  * I am counting on the implemention to substitute&lt;br /&gt;
  * a use-able color if any of these are out of the &lt;br /&gt;
  * devices supported range&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  protected void changeColor()&lt;br /&gt;
  {&lt;br /&gt;
    // The shift is to remove any sign (negative) bit    &lt;br /&gt;
    red = (random.nextInt() &amp;gt;&amp;gt;&amp;gt; 1) % 256;&lt;br /&gt;
    green = (random.nextInt() &amp;gt;&amp;gt;&amp;gt; 1) % 256;&lt;br /&gt;
    blue = (random.nextInt() &amp;gt;&amp;gt;&amp;gt; 1) % 256;&lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Event handling&lt;br /&gt;
  *-------------------------------------------------*/  &lt;br /&gt;
  public void commandAction(Command c, Displayable d)&lt;br /&gt;
  {&lt;br /&gt;
    if (c == cmExit)&lt;br /&gt;
      midlet.exitMIDlet();&lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Reset ball is &amp;quot;Fire&amp;quot; key is pressed&lt;br /&gt;
  *-------------------------------------------------*/  &lt;br /&gt;
  protected void keyPressed(int keyCode)&lt;br /&gt;
  {&lt;br /&gt;
    // Restart&lt;br /&gt;
    if (keyCode == keyFire)&lt;br /&gt;
      init();&lt;br /&gt;
    // Decrease ball size&lt;br /&gt;
    else if (keyCode == keyLeft)&lt;br /&gt;
      radius = Math.max(1, --radius);&lt;br /&gt;
    else if (keyCode == keyRight)&lt;br /&gt;
    // Increase ball size&lt;br /&gt;
     radius = Math.min(getWidth() / 4, ++radius);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Timer and animation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* License&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *  &lt;br /&gt;
 *  * Redistribution of source code must retain the above copyright notice,&lt;br /&gt;
 *      this list of conditions and the following disclaimer.&lt;br /&gt;
 * &lt;br /&gt;
 *  * Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *      this list of conditions and the following disclaimer in the&lt;br /&gt;
 *      documentation and/or other materials provided with the distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors&lt;br /&gt;
 * may be used to endorse or promote products derived from this software&lt;br /&gt;
 * without specific prior written permission.&lt;br /&gt;
 *  &lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *  &lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility. &lt;br /&gt;
 */&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
import java.util.*;&lt;br /&gt;
public class TimerDemo extends MIDlet {&lt;br /&gt;
  Display    display;&lt;br /&gt;
  StarField  field = new StarField();&lt;br /&gt;
  FieldMover mover = new FieldMover();&lt;br /&gt;
  Timer      timer = new Timer();&lt;br /&gt;
  public TimerDemo() {&lt;br /&gt;
    display = Display.getDisplay( this );&lt;br /&gt;
  }&lt;br /&gt;
  protected void destroyApp( boolean unconditional ) { }&lt;br /&gt;
  protected void startApp() {&lt;br /&gt;
    display.setCurrent( field );&lt;br /&gt;
    timer.schedule( mover, 100, 100 );&lt;br /&gt;
  }&lt;br /&gt;
  protected void pauseApp() { }&lt;br /&gt;
  public void exit(){&lt;br /&gt;
    timer.cancel(); // stop scrolling&lt;br /&gt;
    destroyApp( true );&lt;br /&gt;
    notifyDestroyed();&lt;br /&gt;
  }&lt;br /&gt;
class FieldMover extends TimerTask {&lt;br /&gt;
  public void run(){&lt;br /&gt;
    field.scroll();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class StarField extends Canvas {&lt;br /&gt;
  int        height;&lt;br /&gt;
  int        width;&lt;br /&gt;
  int[]      stars;&lt;br /&gt;
  Random     generator = new Random();&lt;br /&gt;
  boolean    painting = false;&lt;br /&gt;
  public StarField(){&lt;br /&gt;
    height      = getHeight();&lt;br /&gt;
    width       = getWidth();&lt;br /&gt;
    stars       = new int[ height ];&lt;br /&gt;
    for( int i = 0; i &amp;lt; height; ++i ){&lt;br /&gt;
      stars[i] = -1;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void scroll() {&lt;br /&gt;
    if( painting ) return;&lt;br /&gt;
    for( int i = height-1; i &amp;gt; 0; --i ){&lt;br /&gt;
      stars[i] = stars[i-1];&lt;br /&gt;
    }&lt;br /&gt;
    stars[0] = ( generator.nextInt() % ( 3 * width ) ) / 2;&lt;br /&gt;
    if( stars[0] &amp;gt;= width ){&lt;br /&gt;
      stars[0] = -1;&lt;br /&gt;
    }&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
  protected void paint( Graphics g ){&lt;br /&gt;
    painting = true;&lt;br /&gt;
    g.setColor( 0, 0, 0 );&lt;br /&gt;
    g.fillRect( 0, 0, width, height );&lt;br /&gt;
    g.setColor( 255, 255, 255 );&lt;br /&gt;
    for( int y = 0; y &amp;lt; height; ++y ){&lt;br /&gt;
      int x = stars[y];&lt;br /&gt;
      if( x == -1 ) continue;&lt;br /&gt;
      g.drawLine( x, y, x, y );&lt;br /&gt;
    }&lt;br /&gt;
    painting = false;&lt;br /&gt;
  }&lt;br /&gt;
  protected void keyPressed( int keyCode ){&lt;br /&gt;
    exit();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Timer and sticker ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * TimerMIDlet.java Copyright (c) 2000 Sun Microsystems, Inc. All Rights&lt;br /&gt;
 * Reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Author: Srikanth Raju&lt;br /&gt;
 * &lt;br /&gt;
 * This software is the confidential and proprietary information of Sun&lt;br /&gt;
 * Microsystems, Inc. (&amp;quot;Confidential Information&amp;quot;). You shall not disclose such&lt;br /&gt;
 * Confidential Information and shall use it only in accordance with the terms&lt;br /&gt;
 * of the license agreement you entered into with Sun.&lt;br /&gt;
 * &lt;br /&gt;
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE&lt;br /&gt;
 * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED&lt;br /&gt;
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR&lt;br /&gt;
 * NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY&lt;br /&gt;
 * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES.&lt;br /&gt;
 */&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
import javax.microedition.lcdui.Choice;&lt;br /&gt;
import javax.microedition.lcdui.ChoiceGroup;&lt;br /&gt;
import javax.microedition.lcdui.rumand;&lt;br /&gt;
import javax.microedition.lcdui.rumandListener;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Displayable;&lt;br /&gt;
import javax.microedition.lcdui.Form;&lt;br /&gt;
import javax.microedition.lcdui.List;&lt;br /&gt;
import javax.microedition.lcdui.Ticker;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
import javax.microedition.midlet.MIDletStateChangeException;&lt;br /&gt;
public class TimerMIDlet extends MIDlet implements CommandListener {&lt;br /&gt;
  private Display display = null;&lt;br /&gt;
  private Ticker stockTicker = null;&lt;br /&gt;
  private String[] _stocks = { &amp;quot;SUNW&amp;quot;, &amp;quot;ORCL&amp;quot;, &amp;quot;NOK&amp;quot;, &amp;quot;MOT&amp;quot; };&lt;br /&gt;
  private String[] _prices = { &amp;quot;9&amp;quot;, &amp;quot;11&amp;quot;, &amp;quot;9.25&amp;quot;, &amp;quot;14.5&amp;quot; };&lt;br /&gt;
  private static final Command exitCommand = new Command(&amp;quot;Exit&amp;quot;,&lt;br /&gt;
      Command.STOP, 0);&lt;br /&gt;
  private static final Command backCommand = new Command(&amp;quot;Back&amp;quot;,&lt;br /&gt;
      Command.BACK, 0);&lt;br /&gt;
  private static final Command doneCommand = new Command(&amp;quot;Done&amp;quot;, Command.OK,&lt;br /&gt;
      0);&lt;br /&gt;
  private Timer stockRefresh = null;&lt;br /&gt;
  private StockRefreshTask stockRefreshTask = null;&lt;br /&gt;
  private int refresh_interval = 10000; // 1000 = 1 second&lt;br /&gt;
  private List menu = null;&lt;br /&gt;
  private ChoiceGroup _updatesChoices = null;&lt;br /&gt;
  private Form _updatesForm = null;&lt;br /&gt;
  private String _currentMenu = null;&lt;br /&gt;
  public TimerMIDlet() {&lt;br /&gt;
  }&lt;br /&gt;
  public void startApp() throws MIDletStateChangeException {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
    menu = new List(&amp;quot;Stock Menu&amp;quot;, Choice.IMPLICIT);&lt;br /&gt;
    menu.append(&amp;quot;Updates&amp;quot;, null);&lt;br /&gt;
    menu.append(&amp;quot;Add Stocks&amp;quot;, null);&lt;br /&gt;
    menu.append(&amp;quot;Remove Stocks&amp;quot;, null);&lt;br /&gt;
    menu.addCommand(exitCommand);&lt;br /&gt;
    menu.setCommandListener(this);&lt;br /&gt;
    // Make the ticker&lt;br /&gt;
    stockTicker = new Ticker(makeTickerString());&lt;br /&gt;
    menu.setTicker(stockTicker);&lt;br /&gt;
    display.setCurrent(menu);&lt;br /&gt;
    _currentMenu = &amp;quot;Stock Menu&amp;quot;;&lt;br /&gt;
    _updatesForm = new Form(&amp;quot;Updates&amp;quot;);&lt;br /&gt;
    _updatesChoices = new ChoiceGroup(&amp;quot;Update Interval:&amp;quot;, Choice.EXCLUSIVE);&lt;br /&gt;
    _updatesChoices.append(&amp;quot;Continuous&amp;quot;, null); // will be 10 seconds&lt;br /&gt;
    _updatesChoices.append(&amp;quot;15 minutes&amp;quot;, null);&lt;br /&gt;
    _updatesChoices.append(&amp;quot;30 minutes&amp;quot;, null);&lt;br /&gt;
    _updatesChoices.append(&amp;quot;1 hour&amp;quot;, null);&lt;br /&gt;
    _updatesChoices.append(&amp;quot;3 hours&amp;quot;, null);&lt;br /&gt;
    _updatesForm.setTicker(stockTicker);&lt;br /&gt;
    _updatesForm.append(_updatesChoices);&lt;br /&gt;
    _updatesForm.addCommand(backCommand);&lt;br /&gt;
    _updatesForm.addCommand(doneCommand);&lt;br /&gt;
    _updatesForm.setCommandListener(this);&lt;br /&gt;
    //Set up and start the timer to refresh the stock quotes&lt;br /&gt;
    stockRefreshTask = new StockRefreshTask();&lt;br /&gt;
    stockRefresh = new Timer();&lt;br /&gt;
    stockRefresh.schedule(stockRefreshTask, 0, refresh_interval);&lt;br /&gt;
  }&lt;br /&gt;
  public String makeTickerString() {&lt;br /&gt;
    String retString = new String();&lt;br /&gt;
    for (int i = 0; i &amp;lt; _stocks.length; i++) {&lt;br /&gt;
      retString += _stocks[i];&lt;br /&gt;
      retString += &amp;quot; @ &amp;quot;;&lt;br /&gt;
      retString += _prices[i];&lt;br /&gt;
      retString += &amp;quot; &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return retString;&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp() {&lt;br /&gt;
    // free memory used by these objects&lt;br /&gt;
    display = null;&lt;br /&gt;
    stockRefresh = null;&lt;br /&gt;
    stockRefreshTask = null;&lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional)&lt;br /&gt;
      throws MIDletStateChangeException {&lt;br /&gt;
    notifyDestroyed();&lt;br /&gt;
  }&lt;br /&gt;
  public void commandAction(Command c, Displayable d) {&lt;br /&gt;
    if (c == exitCommand) {&lt;br /&gt;
      try {&lt;br /&gt;
        destroyApp(false);&lt;br /&gt;
      } catch (MIDletStateChangeException msce) {&lt;br /&gt;
        System.out.println(&amp;quot;Error in detroyApp(false) &amp;quot;);&lt;br /&gt;
        msce.printStackTrace();&lt;br /&gt;
      }&lt;br /&gt;
      notifyDestroyed();&lt;br /&gt;
    } else if (c == backCommand) {&lt;br /&gt;
      _currentMenu = &amp;quot;Stock Menu&amp;quot;;&lt;br /&gt;
      display.setCurrent(menu);&lt;br /&gt;
    } else if (c == doneCommand) {&lt;br /&gt;
      switch (_updatesChoices.getSelectedIndex()) {&lt;br /&gt;
      case 0:&lt;br /&gt;
        refresh_interval = 10000;&lt;br /&gt;
        break;&lt;br /&gt;
      case 1:&lt;br /&gt;
        refresh_interval = 900000;&lt;br /&gt;
        break;&lt;br /&gt;
      case 2:&lt;br /&gt;
        refresh_interval = 1800000;&lt;br /&gt;
        break;&lt;br /&gt;
      case 3:&lt;br /&gt;
        refresh_interval = 3600000;&lt;br /&gt;
        break;&lt;br /&gt;
      case 4:&lt;br /&gt;
        refresh_interval = 10800000;&lt;br /&gt;
        break;&lt;br /&gt;
      default:&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      stockRefreshTask.cancel();&lt;br /&gt;
      stockRefreshTask = new StockRefreshTask();&lt;br /&gt;
      stockRefresh.schedule(stockRefreshTask, 0, refresh_interval);&lt;br /&gt;
      display.setCurrent(menu);&lt;br /&gt;
      _currentMenu = &amp;quot;Stock Menu&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      List shown = (List) display.getCurrent();&lt;br /&gt;
      switch (shown.getSelectedIndex()) {&lt;br /&gt;
      case 0: // Updates&lt;br /&gt;
        display.setCurrent(_updatesForm);&lt;br /&gt;
        _currentMenu = &amp;quot;Updates&amp;quot;;&lt;br /&gt;
        break;&lt;br /&gt;
      case 1: // Add Stock&lt;br /&gt;
        System.out.println(&amp;quot;Add Stock... &amp;quot;);&lt;br /&gt;
        _currentMenu = &amp;quot;Add Stock&amp;quot;;&lt;br /&gt;
        break;&lt;br /&gt;
      case 2: // Remove Stock&lt;br /&gt;
        System.out.println(&amp;quot;Remove Stock... &amp;quot;);&lt;br /&gt;
        _currentMenu = &amp;quot;Remove Stock&amp;quot;;&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * This is an extention of the TimerTask class which runs when called by&lt;br /&gt;
   * Timer. It refreshes the stock info for each stock from the quote server&lt;br /&gt;
   * and checks to see if any of the alerts should be fired.&lt;br /&gt;
   */&lt;br /&gt;
  class StockRefreshTask extends TimerTask {&lt;br /&gt;
    /**&lt;br /&gt;
     * Execute the Timer&amp;quot;s Task&lt;br /&gt;
     */&lt;br /&gt;
    public void run() {&lt;br /&gt;
      try {&lt;br /&gt;
        // Just return if the database is empty&lt;br /&gt;
        if (_stocks.length == 0)&lt;br /&gt;
          return;&lt;br /&gt;
        else {&lt;br /&gt;
          for (int i = 0; i &amp;lt; _stocks.length; i++) {&lt;br /&gt;
            System.out.println(&amp;quot;Stock price for symbol: &amp;quot;&lt;br /&gt;
                + _stocks[i] + &amp;quot; is: &amp;quot; + _prices[i]);&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      } catch (Exception e) {&lt;br /&gt;
        System.out.println(&amp;quot;error(&amp;quot;UPDATE FAILED&amp;quot;, 2000)&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Timer Template ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*--------------------------------------------------&lt;br /&gt;
* TimerTemplate.java&lt;br /&gt;
*&lt;br /&gt;
* Test all six Timer scheduling options&lt;br /&gt;
*&lt;br /&gt;
* Example from the book:     Core J2ME Technology&lt;br /&gt;
* Copyright John W. Muchow   http://www.CoreJ2ME.ru&lt;br /&gt;
* You may use/modify for any non-commercial purpose&lt;br /&gt;
*-------------------------------------------------*/&lt;br /&gt;
import java.util.*;&lt;br /&gt;
import javax.microedition.midlet.*;&lt;br /&gt;
import javax.microedition.lcdui.*;&lt;br /&gt;
public class TimerTemplate extends MIDlet implements CommandListener&lt;br /&gt;
{&lt;br /&gt;
  private Display display;      // Our display&lt;br /&gt;
  private Form fmMain;         // Main form&lt;br /&gt;
  private Command cmExit;      // Exit midlet&lt;br /&gt;
  private Command cmStop;      // Stop the timer&lt;br /&gt;
  private Timer tm;          // Timer&lt;br /&gt;
  private TestTimerTask tt;       // Task&lt;br /&gt;
  private int count = 0;        // How many times has task run&lt;br /&gt;
  public TimerTemplate()&lt;br /&gt;
  {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
    // Create main form&lt;br /&gt;
    fmMain = new Form(&amp;quot;Timer Test&amp;quot;);&lt;br /&gt;
    fmMain.append(&amp;quot;waiting...\n&amp;quot;);&lt;br /&gt;
    // Create commands and add to form&lt;br /&gt;
    cmExit = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
    cmStop= new Command(&amp;quot;Stop&amp;quot;, Command.STOP, 2);&lt;br /&gt;
    fmMain.addCommand(cmExit);&lt;br /&gt;
    fmMain.addCommand(cmStop);&lt;br /&gt;
    fmMain.setCommandListener(this);&lt;br /&gt;
    &lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
    // Option #1 - One time task with delayed start&lt;br /&gt;
    // Create a timer that will go off in 5 seconds&lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
    tm = new Timer();&lt;br /&gt;
    tt = new TestTimerTask();&lt;br /&gt;
    tm.schedule(tt,5000);    &lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
    // Option #2 - Fixed-delay repeating task with delayed start&lt;br /&gt;
    // Create a timer that will go off in 5 seconds&lt;br /&gt;
    // Repeating every 3 seconds&lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
//    tm = new Timer();&lt;br /&gt;
//    tt = new TestTimerTask();&lt;br /&gt;
//    tm.schedule(tt,5000, 3000);    &lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
    // Option #3 - Fixed-rate repeating task with delayed start&lt;br /&gt;
    // Create a timer that will go off in 5 seconds&lt;br /&gt;
    // Repeating every 3 seconds&lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
//    timer = new Timer();&lt;br /&gt;
//    tt = new TestTimerTask();&lt;br /&gt;
//    timer.scheduleAtFixedRate(tt,5000, 3000);    &lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
    // Option #4 - One time task at specified date&lt;br /&gt;
    // Create timer that starts at current date&lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
//    timer = new Timer();&lt;br /&gt;
//    tt = new TestTimerTask();&lt;br /&gt;
//    timer.schedule(tt, new Date());    &lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
    // Option #5 - Fixed-delay repeating task starting &lt;br /&gt;
    //             at a specified date&lt;br /&gt;
    // Create timer that starts at current date&lt;br /&gt;
    // Repeating every 3 seconds&lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
//    timer = new Timer();&lt;br /&gt;
//    tt = new TestTimerTask();&lt;br /&gt;
//    timer.schedule(tt, new Date(), 3000);    &lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
    // Option #6 - Fixed-rate repeating task starting&lt;br /&gt;
    //             at a specified date&lt;br /&gt;
    // Create timer that starts at current date&lt;br /&gt;
    // Repeating every 3 seconds&lt;br /&gt;
    //------------------------------------------------------&lt;br /&gt;
//    timer = new Timer();&lt;br /&gt;
//    tt = new TestTimerTask();&lt;br /&gt;
//    timer.scheduleAtFixedRate(tt, new Date(), 3000);    &lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Show the main Form&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  public void startApp ()&lt;br /&gt;
  {&lt;br /&gt;
    display.setCurrent(fmMain);&lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Shutting down. Cleanup all we created&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  public void destroyApp (boolean unconditional)&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * No pause code necessary&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  public void pauseApp ()&lt;br /&gt;
  { }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * Process events for the main form&lt;br /&gt;
  *-------------------------------------------------*/&lt;br /&gt;
  public void commandAction(Command c, Displayable d)&lt;br /&gt;
  {&lt;br /&gt;
    if (c == cmStop)&lt;br /&gt;
    {&lt;br /&gt;
      tm.cancel();&lt;br /&gt;
    }&lt;br /&gt;
    else if (c == cmExit)&lt;br /&gt;
    {&lt;br /&gt;
      destroyApp(false);&lt;br /&gt;
      notifyDestroyed();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /*--------------------------------------------------&lt;br /&gt;
  * TestTimerTask Class - Run the task&lt;br /&gt;
  *-------------------------------------------------*/  &lt;br /&gt;
  private class TestTimerTask extends TimerTask&lt;br /&gt;
  {&lt;br /&gt;
    public final void run()&lt;br /&gt;
    {&lt;br /&gt;
      fmMain.append(&amp;quot;run count: &amp;quot; + ++count + &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>