程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 通過RAP讓RCP項目運行在浏覽器中

通過RAP讓RCP項目運行在浏覽器中

編輯:關於JAVA

從上篇文章《RAP 與 RCP的差別》中,我們知道,RCP與RAP之間的區別很小,現在我們就開始研究他 們的區別到底有多小,接下來打算將一個RCP項目遷移到RAP項目,我們從這樣的一個實際的例子來演示。

我們先在Eclipse創建一個RCP插件工程,選擇RCP應用的Mail模板。我們就將這個RCP版本的Mail  Demo 變成 RAP版本的Mail Demo,比如我們的插件工程的名稱就叫做“com.vwpolo.rcp.mail”,

創建完RCP插件項目後,我們雙擊打開plugin.xml文件,切換到“Dependencies”選項卡,默認的RCP項 目會依賴“org.eclipse.ui“和”org.eclipse.core.runtime“這兩個項目,在這裡,我們將他們替換成 “org.eclipse.rap.ui”和“org.eclipse.rap.ui.views”,(具體的依賴插件根據項目的需要進行添加 ),

接著我們切換到“Extensions”選項卡,配置擴展點,RCP模板工程默認提供如下擴展點:

在RAP項目中,是通過IEntryPoint 的子類來負責啟動程序,而RCP是通過IApplication的子類來啟動 程序的,所以這裡的“org.eclipse.core.runtime.applications”擴展點沒有用武之地,可以直接刪除 ,替換成RAP支持的“org.eclipse.rap.ui.entrypoint”擴展點,在這個擴展點中可以指定啟動類的ID和 完整路徑還有參數名稱,這裡的參數名稱是提供給Servlet容器判斷應該加載那個應用。

 

我們指定Application這個類負責程序的啟動,這個類原來是RCP的啟動類,我們現在將它實現的接口 由IApplication修改成IEntryPoint,並實現createUI方法,在這個方法中創建UI界面,基本上和 RCP  IApplication的start 方法類似,只是這裡我們不需要處理客戶端的退出,系統會自動幫我們處理好的 。createUI方法很簡單:

1 @Override
2 public int createUI() {
3     Display display = PlatformUI.createDisplay();
4     return PlatformUI.createAndRunWorkbench(display, new  ApplicationWorkbenchAdvisor());
5 }

比較一下RCP的start方法的處理:

1 public Object start(IApplicationContext context) {
2 Display display = PlatformUI.createDisplay();
3 try {
4 int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
5 if (returnCode == PlatformUI.RETURN_RESTART) {
6 return IApplication.EXIT_RESTART;
7 }
8 return IApplication.EXIT_OK;
9 } finally {
10 display.dispose();
11 }
12 }

是不是發現很相似?只是RAP簡化了處理的方法,不需要像RCP那樣循環的檢查系統消息。這樣我們的 org.eclipse.rap.ui.entrypoint擴展點就創建完畢了,

接下來我們看一下“org.eclipse.core.runtime.products”這個擴展點,在RAP中,這個擴展點被 “org.eclipse.rap.ui.branding”替代了,所有我們可以刪除“org.eclipse.core.runtime.products” ,然後新增“org.eclipse.rap.ui.branding”,右鍵選擇這個擴展點,選擇新建一個branding,然後配 置branding的詳細信息:

Id: 指定branding的ID,必須是唯一的,在同一項目中不能重復,

servletName:指定servlet的名稱,在我們打開的浏覽器地址欄上會顯示,

defaultEntrypointId:是指定默認啟動的啟動類ID,這裡指定我們剛才新建的EntryPoint擴展點中指 定的ID,

themeID:使用的主題ID,接下來我們會講解怎麼自定義我們的主題。

Title:顯示在浏覽器標題欄上的信息。

Favoicon: RAP程序的標題欄角的圖標

Body: 背景網頁,比如我們在使用GMail的時候,顯示的那個黃色的”正在載入...“標簽,RAP也可 以這樣做。

exitConfirmationClass:在你關閉RAP程序或者關閉浏覽器的時候彈出的確認推出對話框的提示內容。

在RAP項目中不能直接使用RCP中的綁定功能了,所以我們的刪除”org.eclipse.ui.bindings“ 這個 擴展點。

在ApplicationActionBarAdvisor這個類中應該存在編譯錯誤,因為RAP的ActionFactory沒有提供 ABOUT的Action工廠,要麼我們自己新建,比如:

 1 aboutAction = new Action() {
 2       public void run() {
 3         Shell shell = window.getShell();
 4         Bundle bundle = Platform.getBundle(MailActivator.PLUGIN_ID );
 5         Dictionary headers = bundle.getHeaders();
 6         Object version = headers.get( Constants.BUNDLE_VERSION );
 7         MessageDialog.openInformation( shell,  "RAP MailDemo",   "當前版 本為" + version );
8       }
11     };
12     aboutAction.setText( "關於" );
13     aboutAction.setId( "com.vwpolo.rap.mail.about" );
14     aboutAction.setImageDescriptor( helpActionImage );

或者直接刪除算了。

現在我們的plugin.xml文件中的擴展點項目應該為:

我們啟動一下看看效果,右鍵項目從彈出菜單選擇 Run As -> RAP Application(如果發現 啟動失敗多少刷新幾次就好),下面是效果:

這樣我們的RCP項目就改造好了(雖然有點簡單),大家有興趣趕快試試吧

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