1. 程式人生 > >eclipse外掛開發,RCP開發常識

eclipse外掛開發,RCP開發常識

 基於eclipse進行外掛或者rcp程式開發,需要了解一些基礎知識,例如OSGI,swt,jface,EMF,GMF等概念。

OSGI簡介

   OSGi技術是面向Java的動態模型系統。OSGi服務平臺向Java提供服務,這些服務使Java成為軟體整合和軟體開發的首選環境。Java提供在多個平臺支援產品的可移植性。OSGi技術提供允許應用程式使用精煉、可重用和可協作的元件構建的標準化原語。這些元件能夠組裝進一個應用和部署中。

 SWT簡介  

    SWT(Standard Widget Toolkit) Standard Widget Toolkit是一個開源的GUI程式設計框架,與AWT/Swing有相似的用處,著名的開源IDE-eclipse就是用SWT開發的。在SWT之前,Sun已經提供了一個跨平臺GUI開發工具包AWT (Abstract Windowing Toolkit). 雖然AWT框架也使用的是原生視窗部件(native widgets),但是它一直未能突破LCD問題。LCD問題導致了一些主要平臺特徵的遺失。

為解決這個問題,Sun又建立了一個新的框架。這個框架不再使用原生視窗部件,而是使用模擬視窗部件(emulated widgets)。這個方法雖然解決了LCD問題,並且提供了豐富的視窗部件集,但是它也帶來了新的問題。例如,Swing應用程式的介面外觀不再和原生應用程式的外觀相似。雖然在JVM中這些Swing應用程式已經得到了最大程度的效能改善,但是它們還是存在著其原生對應物所不具有的效能問題。並且,Swing應用程式消耗太多的記憶體,這樣Swing不適於一些小裝置,如PDA和行動電話等。

  SWT框架通過JNI來訪問原生視窗部件。如果在宿主(host)平臺上無法找到一個視窗部件,SWT就會自動地模擬它。為了方便開發SWT程式,在SWT基礎上又建立了一個更易用、功能強大的圖形包“JFace”。然而,JFace並不能完全覆蓋SWT的所有功能,所以程式設計時SWT、JFace都會要用到,但是一般來說,能用JFace的元件就最好不要用SWT的。

  SWT本身僅僅是Eclipse組織為了開發Eclipse IDE環境所編寫的一組底層圖形介面 API。或許是無心插柳,或是有意為之,至今為止,SWT無論是在效能和外觀上,都超越了SUN公司提供的AWT和SWING。目前SWT已經十分穩定。這裡指的穩定應該包含兩層意思:

  一是指效能上的穩定,其中的關鍵是源於SWT的設計理念。SWT最大化了作業系統的圖形構件API,就是說只要作業系統提供了相應圖形的構件,那麼SWT只是簡單應用JNI技術呼叫它們,只有那些作業系統中不提供的構件,SWT才自己去做一個模擬的實現。可以看出SWT的效能上的穩定大多時候取決於相應作業系統圖形構件的穩定性。

EMF簡介

   Eclipse Modeling Framework,基於Eclipse的模型框架。它是Eclipse MDA(Model Driven Architecture)的一個重要組成部分,是Eclipse中許多專案的基礎( e.g, GEF), EMF可以將模型轉換成高效的,正確的,和易於定製的Java程式碼。EMF專案的最初目標是要實現OMG(Object Management Group)的MOF規範(Meta Object Facility)。在專案的進行中EMF的開發人員根據大量的實踐經驗對MOF規範進行了再加工,提取出了一些核心的元素集(MOF 2.0 中稱為EMOF(Essential MOF))。可以說EMF 是MOF核心子集的java高效實現,在EMF 中MOF核心子集的實現稱為Ecore。

GMF簡介

Graphical Modeling Framework(GMF) 提供了圖形化編輯器的開發環境和執行時框架。

eclipse外掛開發常識

1.外掛在什麼時候載入?

第一次外掛被呼叫的時候,例如,外掛提供的擴充套件點被其他外掛呼叫或者開啟的外掛依賴於該外掛。

2.如何配置外掛在平臺啟動時自動載入?

使用"org.eclipse.ui.startup"擴充套件點,在eclipse3.5以後的版本中可以在產品配置資訊中設定自動載入。

3.什麼是擴充套件(extensions)和擴充套件點(extension point)?

擴充套件是一個實現或者應用程式的擴充套件點。

擴充套件點是一系列功能或者程式碼的封裝。應用程式可提供擴充套件點,其他應用可以在不修改應用程式的前提下進行擴充套件。

4.外掛的classpath是怎麼樣的?

OSGi 父 class loader,(java預設根class loader),被匯出的所有外掛引入包,外掛宣告庫以及相關內容。

5.如何在非ui執行緒中訪問UI物件?

使用Display.syncExec(Runnable runnable) 或者Display.asyncExec(Runnable runnable)

6.是否需要顯示呼叫org.eclipse.swt.graphics.Image.dispose()

SWT 圖形需要顯示呼叫dispose()釋放系統資源,如果不呼叫,系統可能會出現資源耗盡情況。

7.什麼是Display,什麼是Shell

Display是一個裝置,是SWT與作業系統的橋樑,SWT通過Display讀取和分發事件,通過SWT元件操作。

Shell是一個UI元件,總是在最頂層,類似桌面視窗

8.什麼是EMF

Eclipse Modeling Framework,模型管理框架。