J2ME 使用 24-bit RGB 色值(高 8 位常為 0x00),四級灰階標準定義:
private final static int WHITE_COLOR = 0x00FFFFFF; // 白
private final static int LIGHT_GRAY = 0x00888888; // 淺灰
private final static int DARK_GRAY = 0x00444444; // 深灰
private final static int BLACK_COLOR = 0x00000000; // 黑
注意:早期單色裝置僅支援黑白兩色,繪圖前應檢測 Display.numColors() 或 Display.isColor() 並優雅降級。
J2ME 採用三層軟體堆疊實現「寫一次,到處執行」:
| 層級 | 名稱 | 核心職責 | 對應規範 |
|---|---|---|---|
| 第 1 層 | JVM 層 | 適配宿主 OS,實現 KVM/CVM 等虛擬機 | CLDC / CDC |
| 第 2 層 | 配置層 | 定義「水平市場」最小 API 集(語言核心、IO、工具類) | CLDC 1.0/1.1, CDC |
| 第 3 層 | 概況層 | 定義「垂直市場」領域 API(UI、持久化、網絡、多媒體) | MIDP, DoJa, Personal Profile 等 |
關鍵機制:同一配置上可運行多個 Profile;同一 Profile 可建構於不同配置之上(理論上)。設備製造商選擇支援的配置+Profile 組合,開發者針對目標組合開發。
兩大常見原因:
package com.mot.j2me.midlets.test 的類,編譯輸出必須在 %ClassPath%/com/mot/j2me/midlets/test/ 目錄樹下test.class ≠ Test.class,Windows 不區分大小寫但裝置/模擐器區分,嚴格遵循 Java 命名慣例(類名首字母大寫)根因:目標裝置僅支援 4 級灰階(2-bit)或黑白(1-bit),標準 24-bit/32-bit PNG 無法直接解碼。
解決流程:
byte[] 陣列(十六進位字面量)嵌入程式碼Image.createImage(byte[] data, int offset, int length) 建立圖片
byte[] pngData = {
(byte)0x89, (byte)0x50, (byte)0x4E, (byte)0x47, (byte)0x0D, (byte)0x0A, (byte)0x1A, (byte)0x0A, ...
};
Image img = Image.createImage(pngData, 0, pngData.length);
現代替代:MIDP 2.0+ 裝置普遍支援標準 PNG,僅極早期機型需此技巧。建議專案構建階段自動化圖片轉換與驗證。
前置知識:Java 純物件導向語言,無 C++/Java 經驗者請先補習 OOP 基礎(封裝、繼承、多態、介面、集合、異常)。
環境搭建清單:
安裝完成後,參考 SDK 範例程式編寫首個 MIDlet,在模擐器運行驗證。
註:原文內容重複出現三次,本整理版去重合併,保留完整技術資訊。