Mega Code Archive

 
Categories / Java / J2ME
 

Example MIDlet

/* J2ME in a Nutshell By Kim Topley ISBN: 0-596-00253-X */ import java.util.Timer; import java.util.TimerTask; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class ExampleMIDlet extends MIDlet {          // Flag to indicate first call to startApp     private boolean started = false;          // Background thread     private Thread thread;          // Timer interval     private int timerInterval;          // Timer     private Timer timer;          // Task to run via the timer     private TimerTask task;          // Required public constructor. Can be     // omitted if nothing to do and no other     // constructors are created.     public ExampleMIDlet() {         System.out.println("Constructor executed");                  // Get the timer interval from the          // manifest or JAD file.         String interval = getAppProperty("Timer-Interval");         timerInterval = Integer.parseInt(interval);          System.out.println("Timer interval is " + interval);     }              protected void startApp() throws MIDletStateChangeException {         if (!started) {             // First invocation. Create and start             // a timer.             started = true;                         System.out.println("startApp called for the first time");             startTimer();         } else {             // Resumed after pausing.              System.out.println("startApp called following pause");         }                  // In all cases, start a background thread.         synchronized (this) {             if (thread == null) {                 thread = new Thread() {                     public void run() {                         System.out.println("Thread running");                         while (thread == this) {                             try {                                 Thread.sleep(1000);                                 System.out.println("Thread still active");                             } catch (InterruptedException ex) {                             }                         }                         System.out.println("Thread terminating");                     }                 };             }         }         thread.start();     }     protected void pauseApp() {         // Called from the timer task to         // do whatever is necessary to          // pause the MIDlet.         // Tell the background thread to stop.         System.out.println("pauseApp called.");         synchronized (this) {             if (thread != null) {                 thread = null;             }         }     }     protected void destroyApp(boolean unconditional)                              throws MIDletStateChangeException {         // Called to destroy the MIDlet.         System.out.println("destroyApp called - unconditional = "                              + unconditional);         if (thread != null) {             Thread bgThread = thread;             thread = null;      // Signal thread to die             try {                 bgThread.join();             } catch (InterruptedException ex) {             }         }         stopTimer();     }          // Starts a timer to run a simple task     private void startTimer() {                  // Create a task to be run         task = new TimerTask() {             private boolean isPaused;             private int count;                      public void run() {                 // Pause or resume the MIDlet.                 System.out.println("Timer scheduled");                 if (count++ == 4) {                     // Terminate the MIDlet                     try {                         ExampleMIDlet.this.destroyApp(true);                     } catch (MIDletStateChangeException ex) {                         // Ignore pleas for mercy!                     }                     ExampleMIDlet.this.notifyDestroyed();                     return;                 }                 if (isPaused) {                     System.out.println(">> Resuming MIDlet");                     ExampleMIDlet.this.resumeRequest();                     isPaused = false;                 } else {                     System.out.println(">> Pausing MIDlet");                     isPaused = true;                     ExampleMIDlet.this.pauseApp();                     ExampleMIDlet.this.notifyPaused();                 }                             }         };                  // Create a timer and schedule it to run         timer = new Timer();         timer.schedule(task, timerInterval, timerInterval);          System.out.println("Timer started.");     }          // Stops the timer     private void stopTimer() {         if (timer != null) {             System.out.println("Stopping the timer");             timer.cancel();         }     } }