Java tutorial
/*-------------------------------------------------- * Snooze.java * * Example from the book: Core J2ME Technology * Copyright John W. Muchow http://www.CoreJ2ME.com * You may use/modify for any non-commercial purpose *-------------------------------------------------*/ import java.util.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.Timer; import java.util.TimerTask; public class Snooze extends MIDlet implements ItemStateListener, CommandListener { private Display display; // Reference to display object private Form fmMain; // The main form private Command cmSnooze; // Start the timer private Command cmReset; // Reset to current date/time private Command cmExit; // Exit the MIDlet private DateField dfSnoozeTime; // How long to snooze private int dateIndex; // Index of the DateField on the Form private Date currentTime; // Current time...changes when pressing reset private Timer tmSnooze; // The timer - keeps track of system time private SnoozeTimer ttSnooze; // Called by the timer private boolean dateOK = false; // Was the user input valid? public Snooze() { display = Display.getDisplay(this); // The main form fmMain = new Form("When to sound the alarm:"); // Save today's date currentTime = new Date(); // DateField with todays date as a default dfSnoozeTime = new DateField("", DateField.DATE_TIME); dfSnoozeTime.setDate(currentTime); // All the commands/buttons cmSnooze = new Command("Snooze", Command.SCREEN, 1); cmReset = new Command("Reset", Command.SCREEN, 1); cmExit = new Command("Exit", Command.EXIT, 1); // Add to form and listen for events dateIndex = fmMain.append(dfSnoozeTime); fmMain.addCommand(cmSnooze); fmMain.addCommand(cmReset); fmMain.addCommand(cmExit); fmMain.setCommandListener(this); fmMain.setItemStateListener(this); } public void startApp() { display.setCurrent(fmMain); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void itemStateChanged(Item item) { if (item == dfSnoozeTime) { // If the user selected date and/or time that is earlier // than today, set a flag. We are using getTime() // method of the Date class, which returns the # of // milliseconds since January 1, 1970 if (dfSnoozeTime.getDate().getTime() < currentTime.getTime()) dateOK = false; else dateOK = true; } } public void commandAction(Command c, Displayable s) { if (c == cmSnooze) { if (dateOK == false) { Alert al = new Alert("Unable to set alarm", "Please choose another date and time.", null, null); al.setTimeout(Alert.FOREVER); al.setType(AlertType.ERROR); display.setCurrent(al); } else { // Create a new timer tmSnooze = new Timer(); ttSnooze = new SnoozeTimer(); // Amount of time to delay long amount = dfSnoozeTime.getDate().getTime() - currentTime.getTime(); tmSnooze.schedule(ttSnooze, amount); // Remove the commands fmMain.removeCommand(cmSnooze); fmMain.removeCommand(cmReset); // Remove the DateField fmMain.delete(dateIndex); // Change the Form message fmMain.setTitle("Snoozing..."); } } else if (c == cmReset) { // Reset to the current date/time dfSnoozeTime.setDate(currentTime = new Date()); } else if (c == cmExit) { destroyApp(false); notifyDestroyed(); } } // Handle the timer task private class SnoozeTimer extends TimerTask { public final void run() { Alert al = new Alert("Time to wake up!"); al.setTimeout(Alert.FOREVER); al.setType(AlertType.ALARM); AlertType.ERROR.playSound(display); display.setCurrent(al); // Cancel this timer task cancel(); } } }