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

J2ME MVC2 開源框架 KBOX 實戰入門:ActionController、KCommand 與除錯模式

     編輯:J2ME

框架概覽

KBOX 採用 MVC2 架構:
View:KGameCanvas、KForm 等可視元件。
Controller:ActionController 單例,接收鍵盤/命令事件,依配置檔分派至 Action。
Model:開發者自訂業務邏輯類別。
配置檔:鍵值對映射 CMD.id.ACTION=package.ActionClass、KEY.canvasId.FIRE.ACTION=...。

快速建立 Hello World

1. MIDlet 註冊 Viewer

public class TestMIDlet extends MIDlet {
    protected void startApp() throws MIDletStateChangeException {
        ActionController ctrl = ActionController.getInstance(true); // true=啟用 debug
        ctrl.registerViewer(this);
        MyKGameCanvas canvas = new MyKGameCanvas("MAIN");
        KCommand btn = new KCommand("測試", Command.HELP, 1, "MYCMD", null);
        canvas.addCommand(btn);
        canvas.setCommandListener(ctrl);
        Display.getDisplay(this).setCurrent(canvas);
    }
    // pauseApp/destroyApp...
}

2. 自訂 Canvas


public class MyKGameCanvas extends KGameCanvas {
    public MyKGameCanvas(String id) { super(id); }
    public void showMsg(String msg) {
        Graphics g = getGraphics();
        g.setColor(0xFFFFFFFF); g.fillRect(0,0,getWidth(),getHeight());
        g.setColor(0xFF000000); g.drawString(msg, 0,0, Graphics.TOP|Graphics.LEFT);
        flushGraphics();
    }
}

3. Action 實作

public class TestAction implements Action {
    public void execute(KCommand cmd, Item item, Displayable dis,
                        ActionForward forward, Hashtable params) {
        MyKGameCanvas c = (MyKGameCanvas) dis;
        c.showMsg("Hello from " + c.getUniqueID() + " cmd=" + cmd.getUniqueID());
    }
}

4. 配置檔(kbox.properties)

DEBUG=true
CMD.MYCMD.ACTION=action.TestAction
KEY.MAIN.FIRE.ACTION=action.TestKeyAction

核心組件詳解

組件說明
KGameCanvas繼承 GameCanvas,重寫 keyPressed/Released 實作按鍵重複觸發靈敏度設定,解決原生長按延遲問題。
KCommand擴充 Command,新增 uniqueID、Hashtable params,支援配置檔映射與參數傳遞。
Action單方法介面 execute(...),任意 POJO 實作即可成為 Action。
ActionForward封裝導向資訊(下一個 View ID、參數),Action 回傳給 Controller 執行畫面切換。

除錯模式(DEBUG=true)

  • 真機拋出未捕獲例外時,KBOX 捕獲並顯示錯誤頁(堆疊追蹤、變數快照),解決真機無控制台痛點。
  • 未定義按鍵/命令會在除錯頁提示,避免靜默失效。
  • 發布前必須設定 DEBUG=false,否則誤觸未定義鍵會彈出錯誤頁影響體驗。

進階用法

  1. 參數傳遞:new KCommand("詳情", Command.SCREEN, 1, "DETAIL", params),params.put("itemId", "123"),Action 取出處理。
  2. 畫面轉向:Action 回傳 forward.setViewId("DETAIL"),Controller 自動實例化並切換。
  3. 攔截器:實作 Interceptor 介面,在 Action 前後注入通用邏輯(登入檢查、日誌、交易)。

專案整合步驟

    1. 下載 KBOX 原始碼(SourceForge/Google Code 歷史倉庫)。
    2. 將 kbox 套件複製至專案 src。
    3. 建立 kbox.properties 放於 src 根目錄(WTK 會打包進 JAR)。
    4. 依上述範例撰寫 MIDlet、Canvas、Action。
    5. 編譯、預驗證、混淆(ProGuard 保留 KBOX 反射用類別)、打包測試。

結語

KBOX 以 < 50 KB 核心體積為 J2ME 帶來 Spring MVC 風格的開發體驗,配合除錯模式大幅降低真機除錯成本,適合中大型專案採用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved