別被厚重的 J2SE 書嚇倒。J2ME 只需掌握:
完全不需要:javac/java 指令細節(IDE/WTK 自動化)、AWT/Swing/Applet、J2SE 完整類庫(J2ME 只有子集,必讀 MIDP/CLDC API 文件)。
| 差異來源 | 影響層面 | 應對策略 |
|---|---|---|
| 螢幕解析度不一 (96x65 ~ 320x240+) | Low-level UI/遊戲佈局 | 相對座標、百分比佈局、多套資源包 |
| 廠商擴展 API 不統一 (Nokia UI, Siemens UI...) | 進階功能(全螢幕、震動、聲音控制) | 介面隔離、反射/動態載入、優雅降級 |
| 裝置實作 Bug (如 Nokia 7650 雙緩衝失效) | 特定機型當機/花屏 | 黑名單機制、針對性 Workaround、真機測試矩陣 |
| 效能/記憶體/ JAR 大小限制差異大 | 資源策略、功能取捨 | 分級資源包、動態下載、最小可行產品 (MVP) 原則 |
| 廠商 | SDK 下載 | 特色 |
|---|---|---|
| Nokia | forum.nokia.com.cn | 最完整:S40/S60 皮膚、UI API、效能分析器、OTA 工具 |
| Siemens | siemens.com | 模擬器獨立安裝、輕量 UI 擴展 |
| Sony Ericsson | developer.sonyericsson.com | JP-8/JP-7、專屬 UI、多媒體擴展 |
| Motorola | motorola.com/developer | iDEN/GSM、專屬擴展、CodeWarrior IDE 整合 |
| Samsung | samsungmobile.com | 自有模擬器、UI 擴展 |
| NEC | nec-mfriend.com | 整合模擬器 SDK |
核心差異:廠商 SDK = WTK 核心 + 專屬模擬器皮膚 + 擴展 API (如 Nokia UI)。商業專案必用目標機型廠商 SDK 驗證,WTK 只適合早期原型。
// Motorola 系列
String imei = System.getProperty("IMEI");
// Siemens 系列
String imei = System.getProperty("com.siemens.IMEI");
// 通用嘗試(部分裝置支援)
String imei = System.getProperty("IMEI");
if (imei == null) imei = System.getProperty("phone.imei");
if (imei == null) imei = System.getProperty("com.nokia.imei");
注意:IMEI 存取需簽名權限或用戶授權,非所有裝置開放。隱私法規 (GDPR 等) 要求明確同意。
問題:在 startApp() 或命令處理中直接發 HTTP 請求,介面立即 setCurrent() 顯示,資料尚未回來 → 畫面閃爍/空白/錯位。
setCurrent(waitScreen) 顯示等待畫面 (ProgressBar/自繪 Loading)setCurrent(targetScreen) 切換// 範例架構
public class NewsScreen extends Form implements Runnable {
private Thread loader;
public NewsScreen() {
super("新聞");
loader = new Thread(this);
loader.start(); // 背景載入
}
public void run() {
// HTTP GET -> 解析 -> append StringItem
// 完成後:
Display.getDisplay(midlet).setCurrent(this); // 切換到已填充資料的畫面
}
}
J2ME 入門看似門檻低,實則坑深。掌握這九大指南——精準 Java 子集、認清平台限制、接受跨平台現實、選對職業賽道、遵循工程原則、建立真機驗證閉環、升級廠商 SDK、善用系統屬性、攻克非同步 UI——能讓你在前幾個月少走無數彎路,直達「能交付商業級產品」的水平。下一步:動手寫一個完整的「記事本」或「貪食蛇」,在實戰中內化知識。