#ff0000 13  2005 . - #000655    .  2
#000655      
#0000ff  Carol Hamer
#000655  MIDlet
 #def       .          ,    ,     :"Tumbleweed".
 MIDlet   ,    MIDlet- (     )     .  MIDlet  ( Jump)       MIDlet   .      ,     . ,  MIDlet  - ,     jad  MIDlet-. 
MIDlet    .         (       ),     (  ),    (  ).  ,        : "Go", "Pause"  "Play Again".               . ,    ,         .  Java  (JVM)       . ,      ,        .    Command        .    ,   Command.BACK  Command.HELP,           .          ,             .
    ,       destroyApp().        ,      .     ,    ,   ;    ,          nill,           .  notifyDestroyed()     ,    ,  JVM  (     Java  /   ).    ,     MIDlet-        .     ,     ,              ,    .
**********  Jump.java *********
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 *    .
 *
 * @ Carol Hamer
 */
public class Jump extends MIDlet implements CommandListener {

  //---------------------------------------------------------
  //     

  /**
   *   .
   */
  private Command myExitCommand = new Command("Exit", Command.EXIT, 99);

  /**
   *        .
   */
  private Command myGoCommand = new Command("Go", Command.SCREEN, 1);

  /**
   *     .
   */
  private Command myPauseCommand = new Command("Pause", Command.SCREEN, 1);

  /**
   *   .
   */
  private Command myNewCommand = new Command("Play Again", Command.SCREEN, 1);

  /**
   * Canvas     .
   */
  JumpCanvas myCanvas;

  /**
   * hread  .
   */
  GameThread myGameThread;

  //-----------------------------------------------------
  //        

  /**
   *  Canvas-  .
   */
  public Jump() {
    myCanvas = new JumpCanvas(this);
    myCanvas.addCommand(myExitCommand);
    myCanvas.addCommand(myGoCommand);
    myCanvas.setCommandListener(this);
  }

  /**
   *   Play again.
   */
  void setNewCommand() {
    myCanvas.removeCommand(myPauseCommand);
    myCanvas.removeCommand(myGoCommand);
    myCanvas.addCommand(myNewCommand);
  }

  /**
   *   go.
   */
  void setGoCommand() {
    myCanvas.removeCommand(myPauseCommand);
    myCanvas.removeCommand(myNewCommand);
    myCanvas.addCommand(myGoCommand);
  }

  /**
   *   pause.
   */
  void setPauseCommand() {
    myCanvas.removeCommand(myNewCommand);
    myCanvas.removeCommand(myGoCommand);
    myCanvas.addCommand(myPauseCommand);
  }

  //----------------------------------------------------------------
  //   MIDlet-

  /**
   *  .
   */
  public void startApp() throws MIDletStateChangeException {
    myGameThread = new GameThread(myCanvas);
    myCanvas.start();
  }
  
  /**
   *    .
   */
  public void destroyApp(boolean unconditional) 
      throws MIDletStateChangeException {
    myGameThread.requestStop();
    myGameThread = null;
    myCanvas = null;
    System.gc();
  }

  /**
   *   thread   pause.
   */
  public void pauseApp() {
    setGoCommand();
    myGameThread.pause();
  }

  //----------------------------------------------------------------
  //   CommandListener

  /*
   *     
   */
  public void commandAction(Command c, Displayable s) {
    if(c == myGoCommand) {
      myCanvas.removeCommand(myGoCommand);
      myCanvas.addCommand(myPauseCommand);
      myGameThread.go();
    } else if(c == myPauseCommand) {
      myCanvas.removeCommand(myPauseCommand);
      myCanvas.addCommand(myGoCommand);
      myGameThread.go();
    } else if(c == myNewCommand) {
      myCanvas.removeCommand(myNewCommand);
      myCanvas.addCommand(myGoCommand);
      myGameThread.requestStop();
      myGameThread = new GameThread(myCanvas);
      System.gc();
      myCanvas.reset();
    } else if(c == myExitCommand) {
      try {
 destroyApp(false);
 notifyDestroyed();
      } catch (MIDletStateChangeException ex) {
      }
    }
  }
}
 .  Thread 
        .     run()        GameCanvas    ,       ,          .
************ GameThread.java *************
package net.frog_parrot.jump;

/**
 *       .
 * @ Carol Hamer
 */
public class GameThread extends Thread {

  //---------------------------------------------------------
  //   

  /**
   *        .
   */
  boolean myShouldPause;

  /**
   *     .
   */
  static boolean myShouldStop;

  /**
   *    .
   */
  boolean myAlreadyStarted;

  /**
   *     
   */
  JumpCanvas myJumpCanvas;

  //----------------------------------------------------------
  //   

  /**
   *  .
   */
  GameThread(JumpCanvas canvas) {
    myJumpCanvas = canvas;
  }

  //----------------------------------------------------------
  //   

  /**
   * , ,   .
   */
  void go() {
    if(!myAlreadyStarted) {
      myAlreadyStarted = true;
      start();
    } else {
      myShouldPause = !myShouldPause;
    }
  }

  /**
   *   .
   */
  void pause() {
    myShouldPause = true;
  }

  /**
   *  .
   */
  static void requestStop() {
    myShouldStop = true;
  }

  /**
   * pfgecr buhs.
   */
  public void run() {
    // flush any keystrokes that occurred before the game started:
1    myJumpCanvas.flushKeys();
    myShouldStop = false;
    myShouldPause = false;
    while(true) {
      if(myShouldStop) {
 break;
      }
      if(!myShouldPause) {
 myJumpCanvas.checkKeys();
 myJumpCanvas.advance();
      }
    }
  }
}
#0000ff : Alex.
#ff0000          :  http://www.mobilab.ru