import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public classs MiracleMIDlet extends MIDlet...{ /**//* 这个对象是每个J2ME程序必有的,代表设备,一般设置为private */ private Display display; /**//*如果要在低级界面上绘制东西,这个Canvas对象是必须有的,一般设置为private */ private MiracleCanvas canvas; /**//* midlet的构造方法,在这里做下面这些操作: 1、创建canvas对象,把midlet引用传递进去; 2、做其他初始化工作。 */ public MiracleMIDlet()...{ canvas = new MiracleCanvs(this); init(); } /**//*其他初始化工作*/ private void init()...{ } /**//*获取display并setCurrent*/ protected void startApp()...{ display = Display.getDisplay(this); display.setCurrent(canvas); } /**//*处理来电及其他系统事件需要暂停程序运行 */ protected void pauseApp()...{ } protected void destroyApp(boolean unconditional)...{ } /**//* 退出程序 */ public void exit()...{ destroyApp(true); notifyDestroyed(); }} import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class MiracleCanvas extends Canvas implements CommandListener,Runnable...{ /**//*这个midlet的引用是必须的,因为要在canvas类中调用midlet的退出程序的方法*/ MiracleMIDlet parent; /**//*屏幕的width,height*/ int width,height; /**//* 如果要在一个单独的线程中做一些工作,可以声明一个Thread对象*/ Thread thread; /**//* 按钮 */ private Command exitCmd = new Command("Exit", Command.EXIT, 1)...{ /**//*传入midlet引用 ,其他初始化工作*/ public MiracleCanvas(MiracleMIDlet midlet)...{ parent = midlet; init(); } /**//*其他初始化工作*/ private void init()...{ setFullScreenMode(true); width = getWidth(); height = getHeight(); addCommand(exitCmd); setCommandListener(this); /**//*this表示把当前的runnable引用*/ thread = new Thread(this); thread.start(); } /**//*实现Runnable接口,就必须要实现这个方法*/ public void run()...{ while(true)...{ repaint(); try...{ Thread.sleep(500); }catch(Exception e)...{ } if(isBreak()...{ break; } } } /**//*需要中止run循环时返回true*/ public boolean isBreak()...{ } /**//* canvas的重要方法,绘制东西到canvas上*/ public void paint()...{ } /**//*如果实现的CommandListener接口,这个方法是必须要实现的方法*/ public void CommandAction(Command c, Displayable s)...{ if(c==exitCmd)...{ parent.exit(); } } /**//*按键处理*/ public void keyPressed(int keyCode)...{ int action = getGameAction(keyCode); switch(action)...{ case Canvas.UP: tips = "UP"; break; case Canvas.DOWN: tips = "DOWN"; break; case Canvas.LEFT: tips = "LEFT"; break; case Canvas.RIGHT: tips = "RIGHT"; break; case Canvas.FIRE: tips = "FIRE"; break; } } /**//* 调用时机: 1、在程序启动后,此方法会在startApp()之前被调用一次; 2、来电事件结束,此方法会再次被调用一次,然后再次调用startApp()方法 */ public void showNotify()...{ } /**//*系统由于来电等系统事件时,此方法会被调用,紧接着调用midlet的pauseApp()方法*/ public void hideNotify()...{ } }