TimerMIDlet.java Source code

Java tutorial

Introduction

Here is the source code for TimerMIDlet.java

Source

/*
 * 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();
        }
    }
}