RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用

RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用。它是Eclipse 3.0版本后新增的一项功能。通过RCP可以快速构建应用程序,具有广阔的应用前景。选自《Eclipse SWT/JFace核心应用

22.1 RCP概述

在Eclipse平台的发展过程中,倡导的是插件的思想。可以说,插件是Eclipse平台的核心内容,但所有的这些插件的运行都要依赖于Eclipse平台的存在。但当程序员开发桌面的应用时,往往想摆脱对Eclipse IDE的依赖,而是希望使用最小的运行环境来运行系统。所以在Eclipse 3.0以后的版本中逐步地将插件的运行从Eclipse的运行平台中剥离出来,从而形成了RCP。

简单地说,RCP系统本质上是Eclipse的插件,但运行时却能够脱离Eclipse平台而独立运行。这就使得RCP的应用更加灵活和广泛。

22.1.1 什么是RCP

RCP本质上是Eclipse的插件,所以当开发RCP应用程序时,可以利用Eclipse平台UI外观和框架来快速地进行开发。例如创建一个菜单栏、工具栏,在RCP开发中很容易,只需要作一定的配置后,编写简单的代码就可以实现复杂的功能,这样就避免了许多重复性的工作。

RCP的系统可以脱离Eclipse平台独立运行,这样大大减少了打包程序后文件的体积,使系统更加小巧和雅观。图22.1清晰地显示了RCP与Eclipse的关系。

RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用

图22.2 ZDT软件的主界面

2.商业的应用

   ● Actuate BIRT Report Designer:http://www.actuate.com/birt,BIRT是Eclipse的一个报表开发引擎的插件,该软件是BIRT报表的设计可视化客户端软件。使用该软件可轻松地创建所需的报表。

   ● Bay Breeze Software – SQL Edge:http://www.baybreezesoft.com/,提供了可视化的执行SQL语句的工作环境,能够显示环境数据库中表的关系图,也能够浏览表中的数据。

   ● BSI CRM on Eclipse:http://www.bsiag.com/joomla/index.php,CRM客户关系管理软件,包括联系人管理、任务管理、项目管理和市场管理等。

   ● IBM Workplace Client Technology:http://www-128.ibm.com/developerworks/ workplace/ products/clienttechnology/,IBM的客户管理软件。该软件的界面效果如图22.3所示。

RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用 RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用   RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用

图22.8 创建RCP项目后的界面

在左侧的项目文件中,会看到自动生成了一些RCP所需要的一些文件,这些都是利用创建向导自动生成的,是RCP程序运行所必需的一些文件。右侧是该项目的描述信息。可以单击右侧的标签来查看设置具体的插件配置参数。22.2.3节将着重讲述这些参数和文件的意义。要运行RCP程序,有以下两种方法:

   ● 最简单的方法是在右侧“测试”信息框中,单击“启动Eclipse应用程序”链接来运行。如果想要以调试方式运行,则单击“以调试方式启动Eclipse应用程序”链接。

   ● 另外也可以用传统的方式运行RCP程序。在项目工程名称处右击,在弹出的快捷菜单中选择“运行方式”|“Eclipse应用程序”命令,也可以运行RCP程序。

无论是哪种方式运行,使用以上方法创建的RCP程序运行后的界面效果如图22.9所示。

RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用

图22.10 项目的文件结构

这些文件的具体说明如下:

   ● src文件夹下为运行插件时的一些类文件。

   ● MANIFEST.MF为插件清单文件,是插件与外界沟通的桥梁。

   ● build.properties文件为构建RCP程序时所导入的类库设置。

   ● plugin.xml是最重要的文件,该文件是插件的配置文件,集中管理插件内部的运行,在该文件中可以查找所有与该插件有关的信息。

(2)看一下插件的配置信息。在如图22.11所示的选项卡中,可以单击切换不同的选项卡。

RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用

图22.12 MANIFEST.MF文件

其中,可以发现这些信息都是以key和value值来描述的。这些key值所表示的意义,可以参考Eclipse自带的参考帮助文档。以下是几个关键的key值所表示的意义。

   ● Bundle-Name:插件的名称。

   ● Bundle-SymbolicName:为插件的唯一标识。

   ● Bundle-Activator:为主程序启动的类的全名。

   ● Require-Bundle:系统编译和运行的依赖项,可以加入其他所必需的插件。

2.添加依赖项

在编译和运行程序时,可能需要使用其他插件类库,这时可以在“依赖项”选项卡中单击“添加”按钮,然后选择运行时所必需的插件或者是某一个插件的类包。如图22.13所示为导入了Ant构建包后的界面。

RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用

图22.14 构建界面

22.2.6 plugin.xml文件

plugin.xml文件是插件开发中最重要的文件,包含声明插件的扩展和扩展点配置。如 图22.15所示为该文件的源代码界面。

下面仔细分析一下各个扩展点的意义。每个扩展点都是一个<extension>元素。下面以第一个扩展点为例,说明各属性的意义。

   ● id=”application”,表示该扩展点的标识。

   ● point=”org.eclipse.core.runtime.applications”,表示扩展点的类型。这里表示该扩展点是系统扩展点,例如另一个扩展点类型“org.eclipse.ui.perspectives”为透视图扩展点。

   ● <run>子项中定义了系统启动的class类,为com.fengmanfei.myrcp.Application,可以在源文件下找到这个.java源文件。

RCP(Rich Client Platform)富客户端平台是基于Eclipse插件开发的一种应用

图22.15 plugin.xml文件

对于不同的扩展点有不同的配置元素,读者可以参考Eclipse的帮助文档。另外,读者无须手动输入这些配置文件,使用Eclipse自带的创建扩展点向导就可以轻松地完成创建扩展点的工作。

22.3 RCP运行的基本原理

了解了这些配置文件后,下面仔细讲解一下整个RCP运行的过程。在22.2节创建的项目中,已经自动生成了MyRCPPlugin、Application、ApplicationActionBarAdvisor、Application WorkbenchAdvisor和Perspective类。这些类是怎样联系起来的呢是以下所要学习的内容。

22.3.1 插件类MyRCPPlugin

系统运行后首先在MANIFEST.MF文件中找到Bundle-Activator所对应的插件类,本项目中是myRCP.MyRCPPlugin类,表示是在myRCP包下的MyRCPPlugin类和该类的具体代码如下:

MyRCPPlugin.java

package myRCP;

import org.eclipse.ui.plugin.*;

import org.eclipse.jface.resource.ImageDescriptor;

import org.osgi.framework.BundleContext;

/**

* 该插件类继承自AbstractUIPlugin类

*/

public class MyRCPPlugin extends AbstractUIPlugin {

    //插件类的对象,为静态对象

    private static MyRCPPlugin plugin;

    /**

    * 构造方法

    */

    public MyRCPPlugin() {

        plugin = this;

    }

    /**

    * 装载Bundle文件并启动插件

    */

    public void start(BundleContext context) throws Exception {

        super.start(context);

    }

    /**

    * 插件运行结束后执行该方法

    */

    public void stop(BundleContext context) throws Exception {

        super.stop(context);

        plugin = null;

    }

    /**

    * 返回该插件的对象

    */

    public static MyRCPPlugin getDefault() {

        return plugin;

    }

    /**

    * 返回相对于插件包文件下的相对路径的图片文件

    *

    * @param path the path

    * @return the image descriptor

    */

    public static ImageDescriptor getImageDescriptor(String path) {

        return AbstractUIPlugin.imageDescriptorFromPlugin(“com.fengmanfei.myrcp”, path);

    }

}

该类主要创建整个插件的对象,是插件的全局对象。可以通过该类的静态方法获得插件对象的引用,然后获得插件的各种信息,包括插件所对应的Bundle文件信息、log日志对象和工作台对象等。例如,以下代码可以获得该插件在MANIFEST.MF定义的标识符。

MyRCPPlugin.getDefault().getBundle().getSymbolicName();

通过MyRCPPlugin.getDefault()还能获得插件的其他对象。各种方法请读者参阅Eclipse API 帮助文档。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91536 人正在系统学习中

来源:布丁88

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2009年5月5日
下一篇 2009年5月6日

相关推荐