摩托羅拉 A6288、V388 等機型內建 KJava 虛擬機 (KVM),支援執行符合 MIDP 1.0 規範的應用程式。KJava 不僅限於特定手機,廣泛適用於各類行動資訊裝置。本文系統介紹 KJava 架構、Motorola SDK 開發環境與實戰範例。
| 配置 | 目標裝置 | 代表規範 |
|---|---|---|
| CLDC | 運算/電力受限 (手機、PDA) | Connected Limited Device Configuration |
| CDC | 資源較充足 (機上盒、車載系統) | Connected Device Configuration |
同一配置下,透過 Profile 定義裝置專屬 API (如 MIDP 定義手機 UI、儲存、網路等)。
傳統 JVM 載入類別前需完整 Bytecode 驗證,資源受限裝置難以負擔。CLDC 採用 預驗證:開發階段在類別檔注入特殊標記,裝置端快速完成驗證,大幅降低執行負擔。
開發工具:CodeWarrior (含模擬器、專案管理、打包簽章)。
所有應用繼承 javax.microedition.midlet.MIDlet,三大核心方法:
startApp():啟動/恢復時呼叫pauseApp():暫停/切換背景時呼叫destroyApp(boolean):結束銷毀時呼叫無 AWT/Swing,採用輕量級 javax.microedition.lcdui:
Displayable 為顯示單元基類 (Canvas, Form, List, Alert...)Display.setCurrent(Displayable) 切換畫面public class HelloWorld extends MIDlet implements CommandListener {
private MainCanvas myCanvas;
private Display myDisplay;
private Command c1, c2, c3;
public HelloWorld() {
myCanvas = new MainCanvas();
myCanvas.addCommand(c1 = new Command("First", Command.SCREEN, 1));
myCanvas.addCommand(c2 = new Command("Second", Command.SCREEN, 1));
myCanvas.addCommand(c3 = new Command("Third", Command.SCREEN, 1));
myCanvas.setCommandListener(this);
myDisplay = Display.getDisplay(this);
}
protected void startApp() {
myCanvas.setUp("first");
myDisplay.setCurrent(myCanvas);
}
protected void pauseApp() {}
protected void destroyApp(boolean unconditional) {}
public void commandAction(Command c, Displayable d) {
myCanvas.setUp(c.getLabel());
}
class MainCanvas extends Canvas {
String ts = "first";
public void setUp(String s) { ts = s; }
protected void paint(Graphics g) {
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0);
g.drawString("Current is the " + ts, getWidth()/2, 60, Graphics.HCENTER | Graphics.TOP);
}
}
}
運行效果:軟鍵選單切換 First/Second/Third,Canvas 即時重繪顯示對應文字。
KJava (J2ME) 透過 CLDC/MIDP 規範統一了嵌入式 Java 開發模型。Motorola SDK 提供完整工具鏈,配合 LCDUI 輕量 UI 框架,開發者可快速構建跨機型行動應用。掌握 MIDlet 生命週期、LCDUI 元件與事件模型是入門關鍵。