首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

Motorola iDEN J2ME 開發實戰(二):MIDlet 結構、編譯預驗證與模擬器運行

     編輯:J2ME

MIDlet 程式結構:三大生命週期方法

所有 MIDlet 必須繼承 javax.microedition.midlet.MIDlet 並實作:

protected void startApp()    // 應用啟動/恢復前景:初始化 UI、啟動執行緒、恢復狀態
protected void pauseApp()    // 進入背景/來電中斷:釋放資源、暫停執行緒、存檔
protected void destroyApp(boolean unconditional) // 銷毀/退出:釋放所有資源、關閉連線、持久化

MIDlet 生命週期狀態圖

狀態轉換:Paused → Active (startApp) → Paused (pauseApp) → Destroyed (destroyApp)。unconditional=true 表示必須銷毀(無視阻塞),false 允許拋出 MIDletStateChangeException 拒絕銷毀。

編寫第一支可視 MIDlet

package com.mot.j2me.midlets.tutorials; // 需與目錄結構一致

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class HelloMIDlet extends MIDlet {
    private Display display;
    private Form form;

    public HelloMIDlet() {
        display = Display.getDisplay(this);
        form = new Form("Hello MIDlet");
        form.append(new StringItem("Hello", "MIDlet"));
    }

    protected void startApp() {
        display.setCurrent(form);
    }
    protected void pauseApp() {}
    protected void destroyApp(boolean unconditional) {}
}

儲存路徑:<SDK>\demo\midlets\com\mot\j2me\midlets\tutorials\HelloMIDlet.java

編譯與預驗證:compileAll.bat 內部機制

在 demo\midlets 目錄執行:

compileAll HelloMIDlet.java

輸出示意:

編譯成功輸出截圖

兩階段核心指令

  1. 編譯:
    javac -O -bootclasspath ..\lib HelloMIDlet.java
    • -bootclasspath ..\lib:指定 CLDC/MIDP 核心類庫 (rt.jar 替代品)
    • -O:啟用優化 (內聯、常數折疊)
  2. 預驗證:
    preverify -classpath ..\lib;. -d . HelloMIDlet
    • -classpath ..\lib;.:核心庫 + 當前目錄編譯輸出
    • -d .:輸出覆蓋原 class 檔 (注入 StackMap 屬性)
    • 若省略 -d,預設輸出至 ./output 子目錄

非 demo 目錄專案的手動編譯指令

REM 假設 SDK 在 D:\MotoSDK,原始碼在 d:\myproj\com\example\MyMidlet.java
cd d:\myproj

REM 1. 編譯
javac -O -bootclasspath D:\MotoSDK\lib com\example\MyMidlet.java

REM 2. 預驗證
preverify -classpath D:\MotoSDK\lib;. -d . com\example\MyMidlet

技巧:將 compileAll.bat 複製到專案根目錄,修改 COMPILECLASS 環境變數指向專案 package,即可一鍵建構。

模擬器運行驗證

runEmul com.mot.j2me.midlets.tutorials.HelloMIDlet

模擬器啟動 → 選擇「啟動」 → 顯示 "Hello MIDlet" 表單 → 成功!

MIDlet 打包發佈 (JAD/JAR) 要點

  • 使用 KToolbar: Project → Package → 產生 HelloMIDlet.jar, HelloMIDlet.jad
  • JAD 關鍵屬性:MIDlet-Name, MIDlet-Version, MIDlet-Vendor, MIDlet-Jar-URL, MIDlet-Jar-Size, MIDlet-1: HelloMIDlet, , com.mot.j2me.midlets.tutorials.HelloMIDlet
  • OTA 部署:上傳至 Web 伺服器,設定 MIME:.jad → text/vnd.sun.j2me.app-descriptor, .jar → application/java-archive

常見新手錯誤與修正

結語

MIDlet 結構極簡,核心在於生命週期狀態機與Displayable 切換。編譯→預驗證→模擬器→打包→OTA,這條鏈路貫穿 J2ME 開發全週期。Motorola SDK 的 compileAll.bat 封裝了標準建構流程,掌握其內部指令,即掌握了從原始碼到可執行 MIDlet 的完整轉換鏈——這正是所有後續自動化建構、持續整合、混淆簽名流程的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤原因修正
構造函數拋出例外構造子中呼叫 Display.getDisplay(this) 但 MIDlet 尚未完全初始化移至 startApp() 或延遲初始化
模擬器顯示空白未呼叫 display.setCurrent() 或 Form 無元件確保 startApp 設定當前顯示物件
預驗證失敗 "Incompatible class file version"JDK 版本過新產生 50.0+ classjavac -target 1.1 -source 1.3 強制相容
真機安裝 "Invalid JAD"JAD 中 Jar Size 與實際不符重新 Package 或手動修正大小