市面上推薦的《PDA與手機開發入門》前章大量講命令行調試、Path 配置,對現代 IDE 用戶純屬負擔。J2ME 開發重在實踐,而非理論考古。直接從 MIDlet 生命週期入手,邊寫邊查 API,效率最高。
每個 J2ME 程序必有且僅有一個入口類繼承 MIDlet,三大生命週期方法對應關鍵閥門:
startApp():程序啟動/恢復前台,初始化 UI、啟動線程。pauseApp():來電/短信中斷,釋放獨佔資源(網絡、錄音等)。destroyApp():用戶退出,保存數據、停止線程、釋放所有資源。構造器 → startApp() → 運行 → pauseApp()/destroyApp(),流程線性可追蹤,調試極其方便。
J2ME 同一時刻只有一個當前屏幕(Displayable 子類:Form、List、Canvas、TextBox)。Display.setCurrent() 切換界面,舊界面即脫屏,無法直接操作。遊戲主循環通常採用 MIDlet + Canvas + Thread 模式:
// Canvas 實現 Runnable
public void run() {
while (running) {
repaint(); // 觸發 paint()
Thread.sleep(40); // 控制幀率
}
}
paint() → run() → paint() 循環,穿插 keyPressed() 等事件,掌握此流程即掌握 90% 遊戲架構。
| 類 | 核心方法 | 用途 |
|---|---|---|
| Graphics | drawImage、fillRect、drawString、setColor/setFont | 繪圖核心,遊戲必修 |
| Command/CommandListener | addCommand、commandAction | 軟鍵菜單交互 |
| Thread/Runnable | start、sleep、wait/notify | 動畫與邏輯線程 |
基點類型(anchor)決定坐標對齊方式:Graphics.TOP|LEFT (0) 左上、Graphics.HCENTER|VCENTER (17) 正中等,繪圖時必須正確指定。
synchronized 配合 wait() 避免 IllegalMonitorStateException。循環標誌位 isRunning 控制啟停。run() 耗時超過間隔會導致線程重疊、遊戲加速 Bug。FPS 優化本質是縮短 run() 耗時,代碼優化直接決定遊戲流暢度。
System.out.println() 追蹤執行路徑,模擬器控制台即時可見。NullPointerException、ArrayIndexOutOfBounds 等秒級定位,別當伸手黨。J2ME 開發沒有捷徑,唯有「少理論、多實戰、重優化、勤總結」。掌握 MIDlet 流程、屏幕模型、線程控制三大支柱,輔以工程化好習慣,即可從容應對碎片化手機市場的挑戰。