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,模型管理框架。

你可能感兴趣的:(eclipse插件开发,RCP开发常识)