主要演示在画布中处理command的事件。
在MiracleCanvas中,通过他的构造函数把MiracleMIDlet的示例传入,以便在command事件中控制退出。
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


public class MiracleMIDlet extends MIDlet...{

Display display;
MiracleCanvas mCanvas;

public MiracleMIDlet()...{

if(mCanvas==null)...{
mCanvas = new MiracleCanvas(this);
}
}

public void startApp()...{
display = Display.getDisplay(this);
display.setCurrent(mCanvas);
}

public void pauseApp()...{
}

public void destroyApp(boolean uncondition)...{
}
}
import javax.microedition.lcdui.*;

public class MiracleCanvas extends Canvas implements Runnable, CommandListener...{

MiracleMIDlet mMIDlet;
Thread t;
int width,height;
boolean draw=false;
private Command drawCommand = new Command("画字",Command.OK, 1);
private Command exitCommand = new Command("退出", Command.EXIT,0);

public MiracleCanvas(MiracleMIDlet mMIDlet)...{
this.mMIDlet = mMIDlet;
width = getWidth();
height = getHeight();
setFullScreenMode(true);
addCommand(drawCommand);
addCommand(exitCommand);
setCommandListener(this);
t = new Thread(this);
t.start();
}

public void run()...{

while(true)...{
repaint();

try...{
Thread.sleep(500);

}catch(Exception e)...{
}
}
}

public void paint(Graphics g)...{
g.setColor(0);
g.fillRect(0,0,width,height);
g.setColor(-1);
g.drawString("Miracle", 64,64,20);

if(draw)...{
g.setColor(0xFF00FF);
g.drawString("drawing...", 64, 100,20);
}
}

public void commandAction(Command c, Displayable s)...{

if(c==drawCommand)...{
draw = !draw;
}

if(c==exitCommand)...{
mMIDlet.destroyApp(true);
mMIDlet.notifyDestroyed();
}
}

}