Mega Code Archive

 
Categories / Java / J2ME
 

A simple class that shows an example of using a Timer and a TimerTask

/*  * Copyright (c) 2000-2001 Sun Microsystems, Inc. All Rights Reserved.  */ import java.lang.*; import java.io.*; import java.util.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; /**  * A simple class that shows an example of using a Timer and  * a TimerTask.  *  * This MIDlet creates two gauges. One gauge gaugeOne,  * sets elements from low to high. The other, gaugeTwo,  * set elements from high to low. In effect, this has  * gaugeOne "going up", and gaugeTwo "going down."  *  * The two timers fire at different intervals.  *  * There are two commands on our form:  *   * OK: toggles whether the times are active or not.  * EXIT: exits the MIDlet.  */ public class TimerMIDlet extends MIDlet implements CommandListener {     // number of elements in gauge     final private static int GAUGE_MAX = 10;     private boolean timersRunning; // tracks state of timers     private Display myDisplay;     // handle to the display     private Gauge gaugeOne;        // "going up" gauge     private Gauge gaugeTwo;        // "going down" gauge     private Form myScreen;         // form on which to                                     // place gauges     private Command cmdOK;         // OK command     private Command cmdExit;       // EXIT command     private Timer timer;     private MyTimerTask timerTaskOne;     private MyTimerTask timerTaskTwo;     /**      * Internal class that provides a TimerTask.      */     private class MyTimerTask extends TimerTask {         private Gauge myGauge; // reference to gauge         private boolean goUp;  // if true, go up         private int num;       // number of times called         /**          * Public constructor: stores "direction" and a reference to          * a gauge.          */         public MyTimerTask(Gauge g, boolean up) {             myGauge = g;             goUp = up;         }         /**          * As the timer fires, this method is invoked. Set gauge          * based on goUp          */         public void run() {             num++;             myGauge.setValue(goUp ?                              GAUGE_MAX -(num % GAUGE_MAX) :                              num % GAUGE_MAX);         }     }     /**      * Public constructor: gets handle to display,      * creates form, gauges, and commands.      */     public TimerMIDlet() {         myDisplay = Display.getDisplay(this);         myScreen = new Form("TimerMIDlet");         gaugeOne = new Gauge("Up Gauge",                              false,                              GAUGE_MAX,                              0);         myScreen.append(gaugeOne);         gaugeTwo = new Gauge("Down Gauge",                              false,                              GAUGE_MAX,                              GAUGE_MAX);         myScreen.append(gaugeTwo);         cmdOK = new Command("OK", Command.OK, 1);         cmdExit = new Command("Exit", Command.EXIT, 1);         myScreen.addCommand(cmdOK);         myScreen.addCommand(cmdExit);         myScreen.setCommandListener(this);     }     /**      * Changes the state of timers to/from active to/from      * not-active.      */     private void flipFlop() {         if (timersRunning) {             timerTaskOne.cancel();             timerTaskTwo.cancel();             timer.cancel();             timersRunning = false;         } else {             timer = new Timer();             timerTaskOne = new MyTimerTask(gaugeOne, false);             timerTaskTwo = new MyTimerTask(gaugeTwo, true);             timer.schedule(timerTaskOne, 0, 1000);             timer.schedule(timerTaskTwo, 0, 1500);             timersRunning = true;         }     }     /**      * Called by the system to start our MIDlet.     * @exception MIDletStateChangeException      */     protected void startApp() throws MIDletStateChangeException {         myDisplay.setCurrent(myScreen);         flipFlop();     }     /**      * Called by the system to pause our MIDlet.      * No actions required by our MIDLet.      */     protected void pauseApp() {}     /**      * Called by the system to end our MIDlet.      * No actions required by our MIDLet.      */     protected void destroyApp(boolean unconditional) {}     /***      * Respond to command selections. Process two commands:      *       * OK: flip flop the timers to/from active      * EXIT: exit this MIDlet      *       */     public void commandAction(Command c, Displayable d) {         if (c == cmdOK) {             flipFlop();         } else if (c == cmdExit) {             destroyApp(false);             notifyDestroyed();         }     } }