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

OCAP 入門(二):為 OCAP RI 撰寫應用程式完整實戰

     編輯:Java 相關知識

承接第一部分,本文教你如何開發可在 OCAP RI 及真實機頂盒運行的應用程式。涵蓋命令列交叉編譯全流程與 Eclipse Workbench (TWB) 插件高效開發模式,含除錯技巧。

交叉編譯概念

OCAP 應用屬交叉編譯:在桌面(Host)用 Java SE 環境建置,目標運行於 OCAP 平台(Target,CDC/FP/PBP ≈ JDK 1.4.2)。OCAP RI 將桌面模擬為機頂盒,編譯產出的應用理論上可在任何 OCAP 裝置運行。

命令列建置實戰

1. 範例 Xlet 代碼

import javax.tv.xlet.*;
import org.havi.ui.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class HelloOCAP implements Xlet {
    private HScene mScene;
    private HelloOCAPUI mContent;

    public void initXlet(XletContext ctx) throws XletStateChangeException {
        System.out.println("HelloOCAP initXlet");
        HSceneFactory factory = HSceneFactory.getInstance();
        mScene = factory.getDefaultHScene();
        mContent = new HelloOCAPUI();
        mContent.setVisible(true);
        mScene.setLayout(new BorderLayout());
        mScene.add(mContent, BorderLayout.CENTER);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension d = toolkit.getScreenSize();
        mScene.setLocation(0, 0);
        mScene.setSize(d.width, d.height);
        mScene.validate();
    }
    public void startXlet() throws XletStateChangeException { mScene.setVisible(true); }
    public void pauseXlet() {}
    public void destroyXlet(boolean forced) throws XletStateChangeException {}
}

class HelloOCAPUI extends Container {
    private boolean mInitialized; private Font mFont; private int mX, mY;
    public HelloOCAPUI() { mInitialized = false; mFont = null; mX = mY = -1; }
    public void paint(Graphics g) {
        String s = "Hello, OCAP!";
        if (!mInitialized) {
            mFont = new Font("Serif", Font.PLAIN, 96);
            int w = getWidth(), h = getHeight();
            FontMetrics fm = g.getFontMetrics(mFont);
            int sw = fm.stringWidth(s), sh = fm.getHeight(), sd = fm.getDescent();
            mX = (w - sw) / 2; mY = (h + sh) / 2 - sd;
            mInitialized = true;
        }
        g.setFont(mFont); g.setColor(Color.blue); g.drawString(s, mX, mY);
    }
}

2. 建置腳本

@echo off
set JAVA_HOME=C:/Progra~1/Java/jdk1.6.0_16
set OCAPROOT=/CableLabs/tru2way/ocap-ri/ocap
set OCAPTC=CableLabs/simulator/Win32/debug
set OCAP_ENV=%OCAPROOT%/bin/%OCAPTC%/env

if not exist bin mkdir bin

%JAVA_HOME%/bin/javac -source 1.4 -target 1.4 ^
 -bootclasspath %OCAP_ENV%/cvm/lib/btclasses.zip;%OCAP_ENV%/cvm/lib/basis.jar;%OCAP_ENV%/sys/ocap-classes.jar ^
 src/*.java -d bin

關鍵:-bootclasspath 指定 OCAP 平台 JAR(basis.jar = CDC/FP/PBP,ocap-classes.jar = OCAP API),確保編譯針對目標平台。

3. 部署至 RI

  • 建立 bin/hostapps.properties 描述應用屬性(ID、啟動模式、主類別等)
  • 腳本 install.bat 將類別檔複製至 RI env/usr/HelloOCAP
  • 修改 mpeenv.ini 類路徑,加入 /syscwd/usr/HelloOCAP

4. 啟動驗證

雙擊桌面圖標或執行 runRI.bat,畫面顯示 "Hello, OCAP!":

Hello OCAP 應用畫面

Eclipse TWB 插件高效開發

安裝步驟

  1. 安裝 Eclipse 3.4.2 Ganymede SR2 for Java Developers
  2. Help → Software Updates → Add Site: https://ri.opencable.com/sdk/updates/eclipse.3.4.2/stable/latest/
  3. 安裝 tru2way Workbench Feature,重啟 Eclipse
  4. Window → Preferences → RI Bundle Registry → 新增 RIBundleManifest.xml(預設 c:\CableLabs\tru2way\ocap-ri\twb_support\)
  5. 還原 mpeenv.ini 類路徑(移除手動加入的項目)

建立專案與服務配置

  1. File → New → Project → OCAP → New OCAP Project → 專案名 HelloOCAP → 選 Hello World Template
  2. Run → Package Services → Open Services Dialog → 新增 Xlet Service Configuration:
欄位值
Application NameHelloOCAP
Application ID0x5025
Organization ID0x1
Control CodeAutostart
VisibilityVisible
TypeUnbound
Base DirectoryC:/eclipse-workspace/HelloOCAP/bin
Xlet Classorg.ocapproject.xlet.HelloWorld

點擊 Apply → Package。

建立執行/除錯配置

  • Run → Run Configurations → OCAP Simulation → 新增 → 名稱 Hello-1-run-configuration → Unbound Xlets 加入剛建立的服務配置 → Run
  • 除錯:建立 Debug Configuration 同樣流程,在原始碼設中斷點(如 initGUI()),以 Debug 模式啟動,Eclipse 切換至 Debug 透視圖,支援單步執行、變數檢視

開發週期驗證

修改原始碼(如變更 HELLOWORLD_STR),Save → Run History 選擇配置,Eclipse 自動重建、打包、啟動 RI,即時看到變更。

結語

掌握命令列與 Eclipse 兩種開發模式,你已能為 OCAP 平台建立應用。CDC/FP/PBP 豐富 API 任你發揮。下一章將深入 RI 內核,敬請期待!

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