程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 使用Eclipse Ganymede為桌面、Web和移動設備開發軟件,第3部分

使用Eclipse Ganymede為桌面、Web和移動設備開發軟件,第3部分

編輯:關於JAVA

第3部分: 采用Ganymede進行嵌入式Rich Client Platform開發

Eclipse Ganymede 是同時發行的 24 個主要 Eclipse IDE 項目。在這個分為三部分 的 “使用 Eclipse Ganymede 為桌面、Web 和移動設備進行開發” 系列教程 中,我們將介紹以下的新 Ganymede 功能:RCP、RAP 和 eRCP,這些功能將允許用一個通 用代碼庫分別為桌面平台、Web 平台和移動平台開發軟件;使用 Subversion 進行版本控 制;以及使用 p2 進行更新和安裝。

開始之前

本教程適用於想要了解如何獲得 Rich Client Platform(RCP)桌面 應用程序並將其轉換為移動應用程序 Embedded Rich Client Platform(eRCP)的所有 Eclipse 開發人員。您應當熟悉 eRCP 概念,比如擴展點和 OSGi 包。Java™ 編程 語言也是必需的。

關於本系列

第 1 部分 將提供 RCP 的新功能、新 Subversion Eclipse 整合 及 p2 封裝和分發系統簡介。

第 2 部分 將引入 Rich Ajax Platform(RAP)編 寫 Web 應用程序。

第 3 部分將討論如何使用 embedded Rich Client Platform(eRCP)開發移動設備的 應用程序。

關於本教程

在這分為三部分系列的 第 1 部分 中,您查看了 讓開發變得更簡單的一些 Eclipse Ganymede 新功能,包括 Subversion 支持和 p2 新插 件分發模型。通過開發一個簡單的任務備忘記事本插件應用程序,然後存儲在 Subversion 中並通過 p2 進行部署,您還看到了成熟的 Rich Client Platform(RCP) 中的一些增量改進。在 第 2 部分 中,您獲得了任務備忘記事本的相同代碼庫,並使用 Ganymede 的 Eclipse Rich Application Platform(RAP)功能對它做了一些小修改,以 將其部署為 Rich Internet Application(RIA)。

在本系列的最後這一部分中,您將使用 Ganymede 的另一項令人興奮的新特性 Embedded Rich Client Project(eRCP),再次修改任務備忘記事本將其部署到移動設備 中。使用這組庫可以獲得用標准 RCP 開發的應用程序,並且只需進行一些修改,就能夠 將應用程序轉換為可以在移動電話和其他手持設備中運行的應用程序。

主題:

下載 eRCP 庫並將其設為目標平台。

重構代碼以使用 eRCP。

用模 擬程序測試備忘記事本應用程序。

將備忘記事本部署到移動設備的模擬程序中。

系統需求

您需要以下技術才能繼續本教程:

Eclipse Ganymede可 以在 Eclipse Foundation 找到 Eclipse Ganymede。Java 2 Standard Edition可以從 Sun Microsystems 獲得 Java™ 2 Standard Edition V5 或更高版本。Windows Desktop Eclipse eRCP 目標平台環境 V1.2下載最新版本的 Windows eRCP V1.2 Runtime 包。撰寫本文時為 2008 年 9 月 2 日發布的 V1.2。

開始使用 eRCP

在本 節中,我們將了解 eRCP 及其功能。而後,在開始編寫代碼之前,將下載 eRCP 庫並將其 設為目標平台。

為移動平台開發軟件面臨的挑戰

雖然移動設備(移動電話 、智能電話、媒體播放器等)的處理能力已經大大提高 —可以使用這些設備運行更 強大的應用程序— 但是在這塊小領域上開發誘人的用戶體驗仍然充滿挑戰性。與桌 面設備不同,移動設備沒有鼠標和小鍵盤(通常),並且顯示區域有限。因此,將普通的 應用程序從桌面平台移植到移動平台的可能性不大,除非考慮這些限制並重新編寫用戶界 面。

Eclipse 成熟的 RCP 使開發人員可以使用一個代碼庫,輕松編寫可以部署到 各種操作系統的全功能桌面應用程序。而且,正如您在 第 2 部分 中見到的一樣,開發 人員可以使用名為 RAP 的 RCP 子集修改該 RCP 應用程序以將其部署在萬維網(World Wide Web)中,而無需犧牲豐富的用戶體驗。類似地,使用 Eclipse Ganymede 中的 Embedded Rich Client Platform(eRCP)的另一個 RCP 子集可以將 RCP 應用程序移植 到運行 J2ME 的所有移動設備中。

什麼是 eRCP

eRCP 是刪除 RCP 的面向桌面特性的項目 — 它由 IBM®、Nokia 和 Motorola 贊助。eRCP 將用等效的移動技術 eSWT、eJFace、 eWorkbench 和 eUpdate 取代 SWT、JFace、Workbench 等傳統桌面框架和更新機制。

eRCP 基於擴展點、OSGi 包及更新機制等更加成熟的概念,它還有用於提供嵌入 式 UI 功能支持的 SWT Mobile Extensions 包。eSWT 直接綁定到本機 GUI 系統,它將 使用本機代碼來完成此操作,因此它依賴於平台。eRCP 的其他組件全是用 Java 代碼編 寫的。因此,如果目標平台沒有 eSWT 和移動擴展端口,則無法運行 eRCP GUI 應用程序 。

圖 1 提供了 eRCP 架構概覽。

圖 1. eRCP 的架構

內核 eSWT提供不屬於特定 UI 設計或交互模型的所有其余功能,包括低級圖形、事件和基本部 件架構。這部分的 eSWT 是設備無關的(device-agnostic),並且適用於更廣泛的嵌入 式設備,包括 MP3 播放器、數碼相機和汽車應用設備。移動擴展提供經常可以在移動設 備中找到的 UI 元素的可選包。它可以創建常見應用程序,並且是根據典型移動設備(例 如電話和 PDA)進行建模的。必須整體包含或排除此包。擴展 eSWT提供經常可以在高端 移動設備和 PDA 中找到的更復雜的 UI 元素的可選包。擴展 eSWT 包適用於補充移動擴 展包。

接下來,下載 eRCP 庫並將其設為目標平台。

下載 eRCP

像 RAP 一樣,eRCP 是 RCP 的子集並且無法在同一個 Eclipse 實例中共存。因此必 須單獨下載並安裝為目標平台。

將您的 Web 浏覽器指向 eRCP 下載頁面。

圖 2. eRCP 運行時下載頁面

有四 個可用平台;允許在不同的目標環境開發和測試應用程序:

Windows® Desktop

Windows Mobile V5/6 Professional

Windows Mobile V5/6 Standard

WinCE V4.0 Professional

Windows 和 WinCE 平台將要求用實際 設備或該設備的軟件模擬程序部署和測試應用程序。但是 Windows Desktop 平台將提供 一個完整的 eRCP 環境,只需使用嵌入庫即可在 Windows 桌面設備中部署,這種平台是 理想的開發平台,並且是在本教程中開始了解的平台。

選擇 Windows Desktop 平 台的下載。系統將把您引導到允許選擇下載鏡像的頁面。選擇方便的鏡像(參見圖 3)並 下載 Windows Desktop 平台運行時。

圖 3. 選擇下載 eRCP 運行時的鏡像

下載 完成時,把包解壓縮到 Eclipse 實例可以訪問的本地目錄中。打開 Eclipse Ganymede, 並確保您的工作空間指向來自本系列的 第 1 部分 中的備忘記事本項目的存儲位置(來 自 第 2 部分 的版本也可以正常運行,但是本文假定從第 1 部分結束時的代碼庫開始) 。

打開 Eclipse 的 Preferences 面板並浏覽到 Preferences > Plug-in Development > Target Platform。通過選擇 Browse 浏覽到包的解壓縮目錄,把目標 平台改為剛下載的運行時。

圖 4. 把目標平台切換為 eRCP

選擇 win32 > eRCP 目錄並單擊 OK,然後單擊 Apply。這將加載 eRCP 插 件並重新編譯備忘記事本項目。

可以預料到,基於 RCP 的備忘記事本在 eRCP 中 不會按照原樣進行編譯,因為控制台中的出現編譯錯誤。

圖 5. 切換到 eRCP 後 的備忘記事本編譯器錯誤

在下 一節中,您將看到需要對代碼進行哪些修改才能使用 eRCP。

針對移動環境進行重 構

與 RAP 一樣,eRCP 是完整的 RCP 的子集。因此,需要重構代碼才能使用 eRCP。此外,需要考慮移動平台的限制並對 UI 的布局做出一些更改。在本節中,您將看 到如何對備忘記事本做出更改。

從 SelectionAdapter 移到 SelectionListener

eRCP 綁定應用程序的方法與 RCP 類似。兩者都是封裝為完整 的 OSGi 包(OSGi 將定義啟動和運行基於 Java 的應用程序的框架)的單獨插件,它有 自己的顯示和用於 GUI 控件的 shell。

但是由於移動應用程序的不同顯示限制, 因此 eRCP 要求修改控件類型以適用於嵌入式應用程序。讓我們介紹一下備忘記事本中使 用的所有控件並查看其 eRCP 等效插件。

首先,RCP 使用的 SelectionAdapter 在 eRCP 中將替換為 SelectionListener。查找備忘記事本中的所有 SelectionAdapter 實例並替換為 SelectionListener(參見清單 1)。這些實例位於 PersonalTaskView.java 和 PersonalTaskViewer.java 中。

清單 1. 使用 SelectionAdapter 的 PersonalTaskView 中的 createPartControl

public  void createPartControl(Composite parent) {
  viewer = new  PersonalTaskViewer(parent);
  viewer.getCloseButton ().addSelectionListener(new SelectionAdapter() {
    public void  widgetSelected(SelectionEvent e) {
      handleDispose();
     }
  });
} 

清單 2 將顯示 PersonalTaskViewer 的 createPartControl 方法,重構它以使用 SelectionListener,而不是 SelectionAdapter。

清單 2. 使用 eRCP 的 SeletionListener 的 createPartControl

public void createPartControl(Composite parent)  {
  viewer = new PersonalTaskViewer(parent);
   viewer.getCloseButton().addSelectionListener(new SelectionListener() {
    public void widgetSelected(SelectionEvent e) {
       handleDispose();
    }

    public void  widgetDefaultSelected(SelectionEvent arg0) {
      // TODO  Auto-generated method stub 
      // TODO For now this is  not implemented 
  }
  });
} 

使用 eWorkbench 而不使用 Workbench

Workbench 模型是 Eclipse 的基礎。它將把插 件的結構定義為 Eclipse 環境。Workbench 將使用透視圖來分配屏幕空間和控制應用程 序的顯示。每個應用程序本身都是由各個視圖組成的。

通過實現適用於移動平台 的、名為 eWorkbench 的版本(例如,eWorkbench 缺少完整的 Workbench 具有的透視圖 模型),eRCP 可以利用 Workbench 模型的子集。插件 eRCP 應用程序沒有 main 方法, 但它擴展 eWorkbench 實例,這可以讓系統發現它並在主 Workbench 線程中運行它。 Workbench 將在所有 eRCP 應用程序之間共享其執行線程,允許多個應用程序在一個 JVM 內運行。

要將備忘記事本修改為使用 eWorkbench,您必須刪除不適用於移動平台 的完整的 Workbench 使用的類。在 Package Explorer 中,刪除以下文件:

ApplicationActionBarAdvisor.java

ApplicationWorkbenchWindowAdviso r.java

ApplicationWorkbenchAdvisor.java

Perspective.java

Tas kOrganizerApplication.java

注意,刪除的一些文件在 eWorkbench 中沒有等效 文件。例如,eWorkbench 沒有透視圖。同樣,它沒有 main 方法,且不需要 Application 類。這些文件體現了 Workbench 與 eWorkbench 之間的一些差異。

刪除單元格修飾符

像在 第 2 部分 中處理 RAP 一樣,您需要刪除 CellModifier 並替換為使用彈出框的機制。這部分內容已經在第 2 部分中詳細介紹過,並且可以在代 碼下載中獲得。在完成這些更改後,Eclipse 應當不再出現編譯錯誤。

圖 6. 進 行 eRCP 修改後的項目的 Package Explorer 視圖

重構 擴展點

現在代碼已經正常編譯,接下來應該修改擴展點以匹配 eRCP 所需的擴展 點。刪除與 eRCP 無關的所有擴展點。和已刪除的代碼一樣,有一些不適用於 eRCP 的 Workbench 擴展,例如透視圖。

打開 plugin.xml,然後單擊 Extensions 選項卡 。Eclipse 將顯示擴展的編輯器,列出備忘記事本所使用的擴展。刪除以下擴展:

org.eclipse.core.runtime.applications

org.eclipse.ui.perspectives

org.eclipse.core.runtime.products

同在上一節中刪除的代碼一樣,這 些是不適用於 eRCP 的 Workbench 擴展,例如透視圖。

現在需要添加對於 eRCP 十分重要的擴展。單擊 Add 查看 New Extension Point Selection 屏幕。

圖 7. 添加 eRCP eWorkbench 應用程序擴展點

選擇 org.eclipse.ercp.eworkbench.applications,並按下 Finish。此擴展是 eRCP 識別任 務備忘記事本視圖的方法,它將作為啟動點,類似於 RCP 中使用的應用程序擴展。在添 加擴展後,Eclipse 將顯示該擴展的屬性。輸入 com.devworks.tutorial.po.application 作為 ID,並輸入 Personal Task Organizer 作為名稱。您還應當確保把 singleton 屬性設為 true,因為這將讓 eRCP 框架知道在設 備中一次只能運行一個備忘記事本。

圖 8. 設置應用程序視圖的屬性

在輸 入這些屬性值後,ID 將顯示在應用程序名稱下的樹視圖中。選擇此 ID 並在標為 normal 的字段中輸入 com.devworks.tutorial.view。這是在應用程序啟動時 eWorkbench 將顯 示的任務備忘記事本視圖的 ID。

圖 9. 設置 eWorkbench 所使用的視圖

如果 在 plugin.xml 中選擇 Dependencies 選項卡,您將注意到 Eclipse 已把 org.eclipse.ercp.eworkbench 自動添加為依賴插件。

圖 10. eWorkbench 被列 為依賴項插件

一定 要保存更改。plugin.xml 現在應當類似於清單 3。

清單 3. 帶有正確依賴關系的 plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<? eclipse version="3.2"?>
<plugin>
  <extension
      point="org.eclipse.ui.views">
   <view  class="com.devworks.tutorial.po.view.PersonalTaskView"
       icon="icons/alt_window_16.gif"
       id="com.devworks.tutorial.po.view"
      name="Personal Task  Organizer">
   </view>
  </extension>
   <extension
      point="org.eclipse.ercp.eworkbench.applications">
    <application
      id="com.devworks.tutorial.po.application"
      name="Personal Task Organizer"
       singleton="true">
     <views  normal="com.devworks.tutorial.po.view">
     </views>
   </application>
  </extension>
</plugin> 

現在已經完成將 RCP 應用程序改編為 eRCP 應用程序的所有必要更改。 在下一節中,您將看到如何在移動設備模擬程序中運行備忘記事本,這是查看代碼運行的 有效方法,並且可以看到運行效果。

用模擬程序測試備忘記事本

在迭代式 代碼測試周期中,部署到移動環境中進行測試是一個耗時的過程。幸運的是,Eclipse 將 提供僅使用 eRCP API 的移動環境的桌面模擬程序。這保證您的代碼能夠按照移動設備的 需求運行和顯示,而無需獲得設備、把應用程序部署到其中再運行。

在本節中, 您將看到如何獲得已經修改為使用 eRCP 的任務備忘記事本應用程序,並將其封裝和部署 到已經作為 eRCP 目標平台的一部分安裝的設備模擬程序中。

創建 eWorkbench 配置

模擬程序本身是 eWorkbench,您在上一節中為其添加了擴展點。和常規 Workbench 的 RCP 應用程序一樣,您必須創建運行時配置才能測試應用程序。轉到 Run > Run Configurations 並從配置類型列表中選擇 Java Application。打開該條目的 上下文菜單並選擇 New。在新配置的 Name 字段中,輸入 eRCP - Task Organizer。

圖 11. 創建運行時配置

選擇 Run an application 單選按鈕並且在其下拉框中選擇 org.eclipse.ercp.eworkbench.eWorkbench。單擊 Apply,然後單擊 Run。eWorkbench 將啟動並顯示已知的所有應用程序列表,包括任務備忘記事本。

圖 12. eRCP Workbench 啟動屏幕

單擊 personal task organizer 以在模擬程序中運行。您現在可以像在正常情況下一樣浏覽它 並嘗試所有功能。

圖 13. 在模擬程序中運行的任務備忘記事本

這說 明應用程序的所有功能正在使用且僅使用 eRCP。但是,要獲得應用程序如何在移動設備 中運行的真實體驗,可以將它實際部署到模擬程序中,見下一節。

部署到設備模 擬器中

雖然 eRCP 允許您在開發環境中直接進行應用程序的完整開發和測試,但 是只有將應用程序真正部署到目標設備中才開始實際測試。只要使用了正確的目標平台和 Java 運行時庫,您可以非常自信 — 您的應用程序在部署後應該可以運行。但是, 可用性和性能問題很重要,它們足以把您再送回到制圖板前。在開發周期就在實際的目標 環境中測試代碼將有助於避免這種情況。

准備部署平台

如果漸漸熟悉可用 於基於 RCP 應用程序的豐富開發平台選擇(包括各種 Microsoft® Windows、Linux 、Mac OS X 和 UNIX® 副本),當發現最新的 eRCP 版本只能有效地支持幾個嵌入式 版本的 Windows 時,您可能會有些失望。早期版本還可用於 Nokia 的 Symbian OS(S80 ),但是此平台現在已經停產,因為 Nokia 開發人員正忙於支持最新的 S60 平台。此平 台停產的直接原因,除了為快速擴大的移動版圖提供與平台與生俱來的 eSWT 實現的挑戰 之外,還包括完整的 eRCP 需要支持 Connected Device Configuration/Foundation Profile 的 JVM 功能。現在的大部分移動設備僅支持 Connected Limited Device Configuration/Mobile Information Device Profile。

除非已經有想要用作部署平台的基於 WinCE V5.0 Professional 的設備,否則應當下 載 Windows Mobile 2003/5/6 版本並將其解壓縮到單獨的目錄中。確保使其獨立於先前 下載的 Windows Desktop 版本。

最後,必須確保有兼容的 JVM。如果設備中已經 安裝一個 JVM,則必須確保它支持 Foundation Profile V1.0 或更高版本。否則,您可 以購買一個適用於 Windows Mobile 的授權 IBM WebSphere® Everyplace Micro Environment 副本,它隨基於 ARM 的設備的 IBM J9 VM 附帶。

使用 Windows Mobile 模擬程序

如果已經有兼容設備可供使用,則可以跳到下一節。如果還沒有 可用設備,也不必購買。一種可行的選擇是使用軟件模擬程序 — 它是直接在開發 計算機中運行的模擬移動電話工作環境的程序。為了實現這個目的,可以下載 Microsoft Device Emulator 的免費副本,它將模擬運行 Windows Mobile 5/6 的 Pocket PC。盡管 在最初設計時此軟件要與 Microsoft 的 Visual Studio® 一起使用,現在獨立版本 也可以使用。

在下載並安裝模擬程序後,您可以用預定義配置啟動它,例如 Pocket PC - Coldboot。此選項將模擬第一次啟動的 Pocket PC 設備。您可以修改模擬 程序的配置,但是對於本教程來說,使用默認設置即可。在關閉模擬程序時,它將給您提 供一次保存其狀態的機會,這樣您可以在後續會話中恢復。

除了模擬之外,還應 當啟動 Device Emulator Manager(參見圖 14)。此應用程序將跟蹤運行的模擬程序, 並允許像在物理設備中一樣控制它們。例如,您可以 “cradling” 模擬設備 ,實現與 PC 同步。在下一節中,將看到這項特殊功能非常有用。

圖 14. Device Emulator Manager

在設備 中安裝 eRCP

在目標設備(或設備模擬程序)中安裝 eRCP 需要把插件復制到設備 的目錄中。完成此操作的最簡單方法是使用 Microsoft ActiveSync,它很有可能包含在 設備支持軟件中(您還可以免費下載它,並與模擬程序結合使用)。

在第一次 “cradling” 設備後,您將收到設置同步配置文件的提示。沒有需要同步的 內容;您關注的真正焦點在於 Tools 菜單中的 Explore Pocket PC 選項。此選項將在類 似 Explorer 的視圖中打開 Pocket PC 的文件系統,這將允許與設備來回傳輸文件。

在開始復制 eRCP 目錄前,可能必須修改其中的一些文件。在 eRCP 目錄中,這 些文件包括幾個 *.lnk 文件,它們是一些預封裝的 eRCP 應用程序的快捷方式。您可能 需要更新它們以反映詳細的 JVM 安裝目錄,因為它們包含硬編碼的目錄路徑。j9foun- eworkbench.lnk 文件尤為有趣,因為在最後一節啟動 eWorkbench 時將使用該文件。在 純文本編輯器中編輯該文件(您甚至可以把它拖到 Eclipse IDE 中),並將其更新為清 單 4 中所示的內容。為了簡單起見,使用 \Program Files\eRCP 作為 eRCP 目錄的路徑 ,使用 \Program Files\J9 作為 JVM 的路徑(除非已經在設備的其它位置中安裝了兼容 的 JVM)。

清單 4. 修改後的文件 j9foun- eworkbench.lnk

37#"\Program Files\J9\bin\j9w.exe" -jcl:foun11 -cp  "\Program Files\eRCP\startup.jar"
org.eclipse.core.launcher.Main - application org.eclipse.ercp.eworkbench.eWorkbench 

如果尚未安 裝 JVM,請將其復制到 \Program Files\J9 中(需要復制包含 bin 和 lib 目錄的目錄 ,然後重命名為 J9)。確保復制設備專用的 JVM,而不是在主機中運行的那一個 JVM。 最後,將相應的 eRCP 目錄復制到 \Program Files\eRCP 中。確保復制 eRCP 的設備版 本,而非在開發計算機中使用的版本。

構建和封裝應用程序

構建和封裝基 於 eRCP 的應用程序沒有特殊要求;只需使用 Eclipse IDE 中的相應導出向導。在 Package Explorer 中,右鍵單擊插件並在 Plug-in Development 下選擇 Export > Select Deployable plug-ins and fragments,然後單擊 Next。確保選中您的插件 (com.devworks.tutorial.po),然後選擇目標目錄並單擊 Finish。該插件將被構建並 封裝為 JAR 文件,然後放在所選目標中的插件目錄下。最後,把導出的插件 JAR 復制到 設備的 \Program Files\eRCP\plugins 中。

啟動已部署的應用程序

由於 插件將實現 org.eclipse.ercp.eworkbench.applications 擴展點,因此新安裝的任務備 忘記事本將在下一次重新啟動 eWorkbench 時顯示在可用應用程序列表中(使用 j9foun -eworkbench 快捷方式)。只需激活列表中的應用程序,然後就會看到熟悉的 UI。

圖 15. 運行在設備模擬程序中的任務備忘記事本

恭喜!您已經成功地部署了 eRCP 的任務備忘記事本應用程序。

結束語

分為三部分的 “使用 Eclipse Ganymede 為桌面、Web 和移動設備開發軟 件” 系列教程到此結束。Eclipse Ganymede 已經包括了許多新功能,這些功能大 大擴展了在桌面設備以外進行開發的機會。在本教程中,您看到了 eRCP 如何支持開發適 合在移動客戶端上運行的富客戶機應用程序。eRCP 是 RCP 的子集,因此必須將其作為目 標平台單獨下載並安裝到 Eclipse 環境中。設置完成之後,只需更改少量的代碼,就可 以將為桌面設備編寫的任何 RCP 應用程序遷移到使用 eRCP 移動設備。

要測試 eRCP 應用程序的功能,您可以使用內置 eWorkbench 環境作為設備模擬程序。但是,您 最終需要使用特定於平台的設備模擬程序才能在目標設備上運行和測試應用程序。希望您 已經體驗到本系列介紹的 Eclipse Ganymede 中的一些新特性是十分有用的。祝您工作愉 快!

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved