亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 編程設計 > 正文

eclipse rcp詳解Hello World以及eclipse rcp和osgi的簡單展示(圖文)

2020-07-14 13:30:19
字體:
來源:轉載
供稿:網友

GUI桌面編程這個話題本來就非常不好寫。這么多年,這么大一個領域,真真正正能寫成像《深入淺出MFC》這樣的經典的書籍沒有幾本。縱觀國內在該領域出版的書籍,要么就是大篇大篇羅列這個控件那個控件怎么用,控件有哪些屬性可以設置,有哪些事件可以處理;要么就是大段大段貼代碼,而對于GUI編程的一些本質、一些哲學性的東西沒有深入的分析。在Eclipse RCP領域尤其如此,有那么幾本打著Eclipse RCP和OSGi大旗的書籍,但是其參考價值卻不比Eclipse自帶的幫助文檔大多少,大有圈錢的嫌疑。
Eclipse RCP是個好東西。用Eclipse RCP寫桌面程序,可以在一個很高的起點上構建自己的窗口應用,至于那種從頭開始寫窗口的日子是再也不復返了,甚至美工都不需要自己考慮了。(想想VC領域有多少界面庫在折磨著程序員。)還有一個好處當然是跨平臺了,雖然要背上一個Java虛擬機的負擔。(現在的Eclipse RCP程序導出時可以自己包含JRE,又大大簡化了程序部署的過程。)
五年前我寫的那幾篇博文有很多缺點,缺點一是其中有些東西我自己都沒有搞懂,所以沒辦法寫得太深入;缺點二是跳躍性太大,總共才六篇,我卻又是展示COM組件,又是展示OpenGL,雖說讓大家在視覺上是狠狠體驗的一把,但是一點也不系統。所以這次一定要改變這些缺點,爭取做到以下目標:

目標:
1.言簡意賅,對于那些有助于理解Eclipse RCP平臺的核心概念重點點出,并結合實例。對于那種在Google上一查一大把的廢話堅決不寫;
2.爭取系統性地介紹Eclipse RCP平臺可用的特性及其背后的一些設計模式,不再浮光掠影地一飄而過,也不專寫冷門偏門;
3.不追求面面俱到,有些用不到的東西肯定沒必要講,也不怕別人說我水平差;
4.當然是大量展示圖片啦。

好了,下面開工,首先,當然是創建一個Hello World,初步展示一些Eclipse RCP的效果。Eclipse RCP編程的本質就是利用Eclipse的插件機制,在Eclipse的Runtime上進行擴展來構建我們自己的窗口程序,所以,創建項目的時候當然是創建一個Plug-in Project了。只是在下面那個“Would you like to create a rich client application ?”的地方選擇yes即可。


一路Next下去,我就不多截圖了。在選擇應用程序模板的時候,選擇最簡單的Hello RCP即可。如果這時運行程序(用Run As -> Eclipse Application),可以得到一個簡單的窗口。

為了顯示Hello World,我們需要一個擴展一個View。創建一個View類,其基類為org.eclipse.ui.part.ViewPart,如下圖:


在HelloWorldView的代碼中,我們只需要一個SWT中的Label控件用來顯示HelloWorld,如下圖:


下一步,就要把這個HelloWorldView插入到窗口中,這個可以通過配置Plugin的Extension來實現。打開plugin.xml的編輯器,增加一個org.eclipse.ui.views的擴展,如下圖:


在Eclipse中,擴展的View并不是馬上顯示到前臺,而是要通過菜單Window->Show View來顯示,或者將View關聯到某個透視圖,切換透視圖的時候顯示這個View。我們的RCP程序的目標是單獨運行,而不是當插件安裝到Eclipse中,追求的是一運行程序就顯示這個View,所以還要擴展org.eclipse.ui.perspectiveExtensions。如下圖:


運行程序,看看效果。通過Run As -> Eclipse Application運行,如下圖:


到現在,我們的工作完成一半,因為該程序還只能在Eclipse中運行,要想脫離Eclipse單獨運行,必須將其作為單獨的產品導出。要導出產品,先要新建一個product configuration,然后進行配置。為簡單起見,我們只需要配置三個地方。
第一個地方:Application,這個關系到程序的啟動點


第二個地方,launcher,這個可以生成一個像eclipse那樣的本地啟動程序


第三個地方,依賴項,可以先把自己添加到依賴項中,然后再點Add Required Plug-ins按鈕添加所有需要的依賴項




我自己第一次接觸Eclipse RCP時,就經常因為不把自己添加到依賴項中而造成程序啟動失敗。

下一步,導出程序,如下圖:


在以上對話框中,我把能省的空都省了。最后得到的目標程序文件夾內容及運行程序的效果如下圖:


以上過程非常簡單,所以先秀圖片。下面,來看看Eclipse RCP和OSGi的一些概念。
  1.Bundle和Bundle的生命周期:Bundle是OSGi的一個概念,我們可以把它理解為模塊、插件,如果僅僅只是學習Eclipse RCP編程的話,就不需要對OSGi進行深入學習,雖然它很流行。但是一些基本的概念還是要知道的。Eclipse完全構建在OSGi之上,它包含有一個OSGi規范的完整實現Equinox。所以Eclipse的一個Plug-in,基本上就等于OSGi的一個Bundle。我們不需要特意去編輯Bundle的定義文件META-INFO/MANIFEST.MF,在編輯plugin.xml的時候,Bundle的定義文件會自動更新。一個Bundle被安裝到OSGi系統中后,并不會馬上啟動,只有當這個Bundle提供的功能被調用的時候,該Bundle才會被啟動,當該Bundle不被用到的時候,它就可以被停止。在一個Bundle的生命周期中,我們可以定義自己的Activator來處理啟動、停止等各個階段的任務,這就是我們前面的例子中為什么要定義一個Activator的原因。通過Activator,我們可以查看OSGi系統中安裝的所有Bundle,因為OSGi系統調用Activator中的方法時,會傳遞一個BundleContext參數,使用該context,我們可以完全訪問整個OSGi系統的功能。
  2.Plug-in之間或Bundle之間的依賴關系:由于Plug-in和Bundle基本上是同義詞,所以在后文中我將不提Bundle。Eclipse的Plug-in機制早已深入人心,一個Plug-in經常會依賴于其它的Plug-in,這已經成為常識,不需要我贅述。Plug-in的定義中最重要的就是它的ID和Version,靠這兩個字段就可以唯一標識一個Plug-in,所以在前面的例子中,凡是出現ID的地方,我都很認真填寫,并且使用com.xkland.....這樣的形式來定義ID,避免出現沖突。對于Name、Vendor這樣的字段,明顯是給人閱讀的,所以就隨便填一填。
  3.還有比Plug-in更小的單位,那就是Package:雖然說Eclipse中的Plug-in是一個很小的單位了,但是還有更小的,那就是Package。如果有人不想依賴整個Plug-in的話,也可以單獨只Import幾個Package。當然,對于我們自己寫的Plug-in,也可以export一些Package供別人使用。在plugin.xml的編輯器中,有一個專門的頁面是用來設置和Package相關的內容的。在前面的例子中沒有演示這一點,因為我覺得我寫的程序還沒有必要分這么細。
  4.Extension和Extension Point:這個好像也早就是Eclipse領域常識性的概念了吧。在Plug-in中可以定義一些Extension Point,在別的Plug-in中可以擴展這些Extension Point。比如在前面的例子中,我們自己的Plug-in擴展了org.eclipse.core.runtime插件(叫Bundle可能更合適)和org.eclipse.ui插件定義的幾個擴展點,這些定義實在plugin.xml編輯器的Extensions頁面定義的。當然,我們的程序沒有定義自己的Extension Point,因為不需要讓別人去擴展什么。
  5.Product不是個什么重要的概念,從前面的例子可以看出,我們定不定義Product的ID都沒什么影響。不過要導出Product的時候,application一定要指定,依賴項也要搞清楚,因為這關系到我們的程序能不能成功運行。

  好了,概念性的東西就將這么多。OSGi不需要深究,因為我們會直接和Eclipse的Runtime打交道,以后會有專門的章節講Eclipse的Runtime提供有哪些服務。下面的例子演示即使不使用Native launcher,也可以通過OSGi框架啟動我們的Hello World。
  在導出Product的時候,選擇如下圖中的單選框和填寫好根目錄:

  就可以得到一個Repository,該Repository是供p2安裝程序使用的,里面沒有Native launcher。如下圖:

  在這個目錄里面建立一個configuration文件夾,里面放一個config.ini,記住,在Linux系統下,configuration文件夾一定要是rwx權限的哦。config.ini文件內容如下:

  該文件定義了OSGi啟動時安裝哪些Bundle,并且這些Bundle默認的啟動級別是多少。啟動級別的數字越小的越優先啟動。configuration/config.ini是OSGi啟動時默認的配置文件路徑,當然也可以使用-configuration選項更改為別的路徑。然后,如下命令啟動HelloWorld:

  在指定啟動OSGi的jar文件時,我偷了點懶,為了少敲幾下鍵盤,使用了一個通配符,大家還是可以很輕松地看出來是哪個文件哦?Equinox的官方文檔在這里:http://eclipse.org/equinox/documents/quickstart-framework.php
  如果想按照Equinox的官方文檔啟動OSGi框架的命令行,還得從Eclipse的安裝目錄找到如下幾個文件:


然后還需要這樣一個config.ini文件:


復制代碼
代碼如下:

<a href="mailto:osgi.bundles=./org.apache.felix.gogo.runtime_0.10.0.jar@start,/">osgi.bundles=./org.apache.felix.gogo.runtime_0.10.0.jar@start,/</a>
<a href="mailto:./org.apache.felix.gogo.command_0.12.0.jar@start,/">./org.apache.felix.gogo.command_0.12.0.jar@start,/</a>
<a href="mailto:./org.apache.felix.gogo.shell_0.10.0.jar@start,/">./org.apache.felix.gogo.shell_0.10.0.jar@start,/</a>
<a href="mailto:./org.eclipse.equinox.console_1.0.0.dist.jar@start,/">./org.eclipse.equinox.console_1.0.0.dist.jar@start,/</a>
osgi.console.enable.builtin=false
osgi.console=<port>


才能夠按照Equinox的文檔那樣用java -jar org.eclipse.osgi_3.8.1.dist.jar -console啟動OSGi框架的命令行。

從Hello World這個例子可以看出,我們的Eclipse RCP程序構建在org.eclipse.core.runtime和org.eclipse.ui這兩個Bundle上。下一篇,我將為大家講述這兩個Bundle能為我們提供哪些服務。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产日韩一区| 国产成人精品免费久久久久| 日本欧美国产在线| 久久久国产在线视频| 亚洲天堂第一页| 亚洲老司机av| 国产免费一区二区三区在线观看| 成人网址在线观看| 亚洲成人a**站| 国产精品日日摸夜夜添夜夜av| 久久免费视频在线| 4p变态网欧美系列| 欧美激情第一页xxx| 精品色蜜蜜精品视频在线观看| 欧美激情亚洲自拍| 国产精品91久久久| 国产男人精品视频| 国产日韩精品综合网站| 日韩av黄色在线观看| 国外成人免费在线播放| 国产美女扒开尿口久久久| 国产91在线播放| 亚洲精品国产品国语在线| 国产精品一区二区三区成人| 欧美日韩国产在线| 亚洲成人久久电影| 97在线视频免费播放| 欧美大片欧美激情性色a∨久久| 午夜精品久久17c| 色妞色视频一区二区三区四区| 国产精品一区二区久久久久| 这里精品视频免费| 亚洲自拍偷拍网址| 亚洲男人第一av网站| 欧美在线免费看| 日韩中文字幕欧美| 国产日韩欧美电影在线观看| 91久久精品国产91久久性色| 亚洲成人在线视频播放| 亚洲一区第一页| 中文字幕日韩在线播放| 亚洲午夜国产成人av电影男同| 久久91精品国产| 久久在线视频在线| 国产精品www色诱视频| 亚洲第一视频网站| 在线视频欧美性高潮| 欧美日韩在线看| 欧美激情亚洲自拍| 欧美激情免费视频| 国产精品黄色影片导航在线观看| 亚洲二区在线播放视频| 日韩电视剧免费观看网站| 国产女人18毛片水18精品| 日本一区二三区好的精华液| 亚洲精品国产成人| 国产日韩中文字幕在线| 国产精品久久久久久久久免费看| 青草青草久热精品视频在线网站| 青草青草久热精品视频在线网站| 97av在线视频| 亚洲电影免费观看高清完整版在线| 精品小视频在线| 91精品视频在线播放| 亚洲国产女人aaa毛片在线| 日本午夜在线亚洲.国产| 奇门遁甲1982国语版免费观看高清| 国产精品日日摸夜夜添夜夜av| 欧美中文字幕视频在线观看| 国自在线精品视频| 清纯唯美亚洲综合| 久久99精品久久久久久青青91| 97久久国产精品| 91日本在线视频| 久久6精品影院| 一级做a爰片久久毛片美女图片| 欧美精品成人91久久久久久久| 成人激情黄色网| 中文.日本.精品| 日韩电影免费观看在线观看| 久久久久国产精品免费| 国产视频一区在线| 欧美亚洲国产精品| 欧美高清视频免费观看| 久久精品亚洲精品| 欧美一区三区三区高中清蜜桃| 日韩成人高清在线| 日韩在线视频导航| 久久躁日日躁aaaaxxxx| 91青草视频久久| 深夜福利日韩在线看| 欧美一区二区三区图| 日本三级韩国三级久久| 亚洲aaa激情| 91精品国产电影| 91av免费观看91av精品在线| 国产日韩欧美在线| 国产欧美日韩中文字幕| 中文字幕av一区中文字幕天堂| 国产免费一区二区三区在线能观看| 日韩视频免费看| 一区二区三区精品99久久| 国产精品国产自产拍高清av水多| 国产美女久久久| 亚洲欧美日韩精品| 欧美激情精品久久久久久黑人| 国产精品1区2区在线观看| www.日本久久久久com.| 亚洲欧美在线播放| 亚洲欧美日韩在线一区| 亚洲福利在线观看| 久久精视频免费在线久久完整在线看| 中文字幕日韩在线观看| 成人精品久久一区二区三区| 亚洲日本欧美日韩高观看| 91沈先生作品| 亚洲成人免费网站| 欧美午夜精品久久久久久浪潮| 亚洲精品电影网站| 日韩中文字幕在线| 日本伊人精品一区二区三区介绍| 欧美肥老太性生活视频| 国产精品久久久久影院日本| 亚洲最新在线视频| 91亚洲精华国产精华| 日韩av电影在线播放| 欧美成人性色生活仑片| 欧美又大又粗又长| 精品国产一区二区三区久久久| 亚洲老头老太hd| 国产综合在线视频| 日本国产欧美一区二区三区| 在线播放日韩专区| 精品久久久久久久久中文字幕| 91久久精品视频| 一道本无吗dⅴd在线播放一区| www.xxxx欧美| 九九热精品视频在线播放| 日韩中文第一页| 日韩中文字幕免费| 欧美日韩999| 中文字幕日韩欧美在线| 欧美日韩电影在线观看| 国产精品男人爽免费视频1| 亚洲一区二区三区毛片| 国产精品女主播| 91精品中国老女人| 欧美精品久久久久久久久久| 国产97在线|日韩| 日本精品视频在线观看| 欧美一区视频在线| 国产精品久久久av| 亚洲视频在线看| 国产精品一区二区三区久久| 亚洲黄色www| 久久国产天堂福利天堂| 福利微拍一区二区| 九九久久精品一区| 午夜精品一区二区三区在线播放| 国产精品高潮视频| 欧美成人午夜剧场免费观看| 91精品国产综合久久香蕉的用户体验| 国产精品扒开腿做爽爽爽的视频| 911国产网站尤物在线观看|