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

J2ME 入門經典:Eclipse + WTK 打造 HelloWorld 完整教學與 MIDlet 生命週期深度解析

     編輯:J2ME

開發環境搭建:Eclipse + Sun WTK

  1. 安裝 JDK 1.4+(WTK 不含 JVM)。
  2. 安裝 Sun Java Wireless Toolkit (WTK) 2.2。
  3. 安裝 Eclipse 與 EclipseME 外掛(或使用 MTJ)。
  4. 配置 EclipseME:Window → Preferences → J2ME 指向 WTK 安裝目錄。

建立首個 MIDlet 專案

  1. File → New → Project → J2ME → J2ME Midlet Suite
  2. 專案名:HelloWorld,目標平台選 MIDP 2.0 / CLDC 1.1。
  3. 右鍵專案 → New → Other → J2ME → J2ME Midlet,類名 HelloWorld。

完整原始碼與註解

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

public class HelloWorld extends MIDlet implements CommandListener {
    private Form form;
    private Command exitCmd;
    private Display display;

    public HelloWorld() {
        form = new Form("Hello World");
        form.append("Welcome to J2ME World!");
        
        exitCmd = new Command("Exit", Command.EXIT, 1);
        form.addCommand(exitCmd);
        form.setCommandListener(this);
    }

    protected void startApp() throws MIDletStateChangeException {
        display = Display.getDisplay(this);
        display.setCurrent(form); // 顯示表單
    }

    protected void pauseApp() {
        // 釋放資源、暫停執行緒、存檔等
    }

    protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
        // 釋放所有資源、關閉連線、儲存狀態
    }

    public void commandAction(Command c, Displayable d) {
        if (c == exitCmd) {
            try {
                destroyApp(false);
                notifyDestroyed(); // 通知 AMS 銷毀 MIDlet
            } catch (MIDletStateChangeException e) {
                e.printStackTrace();
            }
        }
    }
}

MIDlet 生命週期三狀態機制

每個 MIDlet 在應用管理軟體 (AMS) 控制下在三種狀態間流轉:

狀態觸發方法典型操作
Paused (暫停)建構子執行完畢 / pauseApp()釋放非關鍵資源、暫停動畫執行緒、存檔
Active (執行中)startApp()取得 Display、顯示 UI、啟動遊戲迴圈、恢復網路連線
Destroyed (銷毀)destroyApp() → notifyDestroyed()釋放所有資源、關閉 RMS/網路、儲存最終狀態

狀態轉換流程圖

[AMS 建立實例] → Paused → startApp() → Active
                      ↑                ↓
                      └── pauseApp() ←─┘
                      ↓
                 destroyApp() → Destroyed → notifyDestroyed() → AMS 回收

核心 UI 類別速查

類別繼承自用途
DisplayObject管理螢幕輸出與輸入,每個 MIDlet 單例,getDisplay(this) 取得
DisplayableObject可顯示物件基類
ScreenDisplayable高層 UI 基類(含標題、命令、Ticker)
FormScreen容器,可放入 Item(StringItem, TextField, ChoiceGroup...)
CommandObject抽象使用者動作(如 EXIT, OK, BACK),綁定 CommandListener
CanvasDisplayable低層 UI,完全控制繪製(paint())、按鍵(keyPressed())

運行與除錯

  • Eclipse 工具列 Run → Run As → Emulated J2ME Midlet 啟動模擬器。
  • 模擬器選單 File → Exit 觸發 destroyApp()。
  • 控制台輸出 System.out.println() 訊息,方便除錯。

常見新手錯誤避坑指南

  • ❌ 忘記 form.setCommandListener(this) → 按鍵無反應。
  • ❌ startApp() 重複執行邏輯 → 每次從 Paused 回 Active 都會重跑,需加旗標判斷。
  • ❌ destroyApp() 未釋放資源 → 記憶體洩漏、RMS 損壞。
  • ✅ 善用 Display.getDisplay(this).setCurrent() 切換畫面,而非 new 多個 Display。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved