J2ME Java Tutorial

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;
public class J2MEFixedRateSchedule extends MIDlet {
  private Timer aTimer;
  private ClockTimerTask aTimerTask;
  Displayable d = new ClockCanvas();
  private Date currentTime= new Date();
  private Calendar now = Calendar.getInstance();
  private String nowString = "";
  public void startApp() {
    d.addCommand(new Command("Exit", Command.EXIT, 0));
    d.setCommandListener(new CommandListener() {
      public void commandAction(Command c, Displayable s) {
        notifyDestroyed();
      }
    });
    now.setTime(currentTime);
    nowString = now.get(Calendar.HOUR) + ":" + now.get(Calendar.MINUTE) + ":"
        + now.get(Calendar.SECOND) + ":";
    aTimer = new Timer();
    aTimerTask = new ClockTimerTask();
    aTimer.scheduleAtFixedRate(aTimerTask, 10, 1000);
    Display.getDisplay(this).setCurrent(d);
  }
  public void pauseApp() {
  }
  public void destroyApp(boolean unconditional) {
  }
  class ClockCanvas extends Canvas {
    public void paint(Graphics g) {
      int width = getWidth();
      int height = getHeight();
      g.setGrayScale(255);
      g.fillRect(0, 0, width - 1, height - 1);
      g.setGrayScale(0);
      g.drawRect(0, 0, width - 1, height - 1);
      g.drawString(nowString, 10, 10, Graphics.TOP | Graphics.LEFT);
    }
  }
  class ClockTimerTask extends TimerTask {
    public final void run() {
      currentTime = new Date();
      now = Calendar.getInstance();
      now.setTime(currentTime);
      nowString = now.get(Calendar.HOUR) + ":" + now.get(Calendar.MINUTE) + ":"
          + now.get(Calendar.SECOND) + ":";
      ((ClockCanvas) d).repaint();
    }
  }
}