- 浏览: 141193 次
- 性别:
- 来自: 广州
最新评论
-
zfms:
写的不孬,有时间交流一下
Openfire Server presence(在线状态)消息处理流程 -
yangjianzhouctgu:
您好 可以请教您个问题吗
Aptana Ajax库插件---EXT2.0 -
tianlihu:
不错,比较有效解决了问题
IE6中用了float:left之后导致margin-left双倍边距的BUG解决方法 -
mzba520:
我想请问能不能把openfire部署到tomcat中去,就是把 ...
openfire 源代码研究一 (运行环境的搭建) -
eric_hwp:
...
部署Openfire源码
有不少朋友问到如何把一个已有的Eclipse插件转换为RCP应用程序,其实这个过程并不复杂,因为RCP应用也是基于插件的结构,可以说RCP 就是精简后的Eclipse平台,只是我们要对这个平台做一些定制工作。将任何一个传统的Eclipse插件项目转换到RCP可以分为两个步骤,这篇先介绍第一个步骤:建立应用程序。
在GEF入门系列(三、应用实例)里我曾做过一个精简的GEF应用程序(下载),这一篇里我就一步一步的把这个例子转换为RCP应用程序(点击下载转换后的项目打包)。应用程序(Application)是通过扩展org.eclipse.core.runtime.applications扩展点建立的,其作用是让Eclipse知道你的RCP需要什么样的功能,比如界面上有哪些视图,菜单和工具条,应用程序窗口的初始大小等等。在plugin.xml里添加应用程序的定义很简单,像下面这样指定一个id和一个类名就可以了。
id="myapplication"
point="org.eclipse.core.runtime.applications">
<application>
<run class="com.example.application.MyApplication"/>
</application>
</extension>
接下来我们的主要任务是实现这个类,MyApplication必须实现 org.eclipse.core.runtime.IPlatformRunnable接口,这个接口只定义了一个run()方法,对于Eclipse Platform来说这个方法就相当于传统java程序的main()方法,是入口方法。所有RCP应用程序里这个方法的实现几乎是完全一样的,即启动 Workbench,并把一个WorkbenchAdvisor实例作为参数传给它,如下所示:
public Object run(Object args) throws Exception {
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display, new MyWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IPlatformRunnable.EXIT_RESTART;
}
return IPlatformRunnable.EXIT_OK;
} finally {
display.dispose();
}
}
}
所以应用程序的定制实际上是通过这个WorkbenchAdvisor实例实现的。现在我们要构造 org.eclipse.ui.application.WorkbenchAdvisor类的一个子类,也就是上面代码里出现的 MyWorkbenchAdvisor,然后覆盖它的一些方法。比较重要的是这两个方法:createWorkbenchWindowAdvisor() 返回一个WorkbenchWindowAdvisor实例,从类名不难看出它的作用是定制应用程序窗口,包括菜单和工具条,稍后将详细介绍; getInitialWindowPerspectiveId()返回一个透视图的id字符串,这个透视图定义RCP应用程序的界面布局,所以如果在原来的插件里你没有定义透视图,现在必须要新定义一个了。
private static final String PERSPECTIVE_ID = "com.example.ui.MyPerspective";
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
return new MyWorkbenchWindowAdvisor(configurer);
}
public String getInitialWindowPerspectiveId() {
return PERSPECTIVE_ID;
}
public void initialize(IWorkbenchConfigurer configurer) {
super.initialize(configurer);
//The workaround call
WorkbenchAdapterBuilder.registerAdapters();
}
}
注意:因为我们这个RCP里用到了Resource视图,而这个视图依赖org.eclipse.ui.ide,所以要在上面的 initialize()方法里手动注册一下Adapter,否则Resource视图里无法显示现有项目。(Resource视图在RCP里不推荐使用,这个调用是无奈之举,请参考这条bug报告)
现在来看一下前面代码里MyWorkbenchWindowAdvisor是怎样实现的,它继承自 org.eclipse.ui.application.WorkbenchWindowAdvisor类,为了定义窗口大小和标题要覆盖 preWindowOpen()方法,可以看到我们还顺便隐藏了工具条;要定义窗口的菜单和工具条,应该覆盖 createActionBarAdvisor()方法,返回的ActionBarAdvisor实例马上会介绍到。
public MyWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
public ActionBarAdvisor createActionBarAdvisor(
IActionBarConfigurer configurer) {
return new MyActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(700, 500));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("My RCP Application");
}
}
有没有注意到,我们新建(和即将新建)的几个类有这样的引用关系:MyApplication->MyWorkbenchAdvisor- >MyWorkbenchWindowAdvisor->MyActionbarAdvisor,在3.1M5以前的Eclipse RCP版本中,还没有ActionbarAdvisor这个类,大部分应用程序定制工作都是在WorkbenchWindowAdvisor这一个类中做的,带来的问题是这个类的代码很长,可复用的程度比较低;采用现在这种方式就方便多了,比如可以定义几个ActionbarAdvisor然后在 WorkbenchWindowAdvisor中根据需要做出选择,得到的应用程序就具有不同的功能,等等。
现在就来看看MyActionbarAdvisor是怎么实现的,它继承 org.eclipse.ui.application.ActionBarAdvisor类,我们先在makeActions()里构造需要出现在菜单或工具条上的命令,注意要调用register()方法注册这些命令,作用是在应用程序结束后释放资源,同时支持快捷键操作;然后在 fillMenuBar()方法里把这些命令加入主菜单,因为我们隐藏了工具条,所以没有覆盖fillCoolBar()方法,另外你还可以通过覆盖 fillStatusLine()定义自己的状态栏。我们的这个类实现得很简单,只是一个退出程序菜单项,你应该根据需要添加自己的命令。
private IWorkbenchAction exitAction;
public MyActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
protected void makeActions(final IWorkbenchWindow window) {
exitAction = ActionFactory.QUIT.create(window);
register(exitAction);
}
protected void fillMenuBar(IMenuManager menuBar) {
MenuManager fileMenu = new MenuManager("&File",
IWorkbenchActionConstants.M_FILE);
menuBar.add(fileMenu);
fileMenu.add(exitAction);
}
}
现在,应用程序需要的类都写好了,让我们检查一下应用程序是否可以正常启动。在Eclipse主菜单上选择Run->Debug...命令,在对话框左边的“Eclipse Application”组下新建一个运行项“gefpractice-rcp”,在“Program to Run”组下选择“Run an application”,然后在下拉列表里找到我们的应用程序id,要说明的是在applications扩展点里我们指定的id是 “myapplication”,而这里列出的id则添加了插件id作为前缀,变成了“GefPractice-RCP.myapplication”,如图1所示。
图1 设置为运行应用程序
因为缺省运行会启动Eclipse的全部插件,这样在应用程序里会出现多余的菜单项和功能,所以要设置为只启动我们的这一个插件,方法是切换到 Plug-ins属性页,选择“Choose plug-ins and fragments to launch from the list”,点击右边的“Deselect All”按钮清空选择列表,勾选上我们的插件项目,再按“Add Required Plug-ins”让Eclipse自动添加它依赖的其他插件就可以了,如图2所示。
图2 只启动我们的这一个插件
现自使用这个运行配置启动我们的应用程序,会得到一个很“干净”的界面,如图3所示,如果不是那些Eclipse特有的编辑器/视图的标题栏,你能猜出它是一个Eclipse应用程序吗?作为对比,这是Eclipse插件的版本的运行截图。
图3 运行中的应用程序
建立了应用程序,代码的部分就算是完成了,但要得到一个完整的可独立运行的产品这样还不够,下一个帖子里将介绍另一个步骤:将应用程序包装为产品。如果等不及可以先看Branding Your Application这篇文章,只是这篇文章写得比较早,我下个部分要写的是使用.product配置产品,可以更方便的达到相同的目的。关于建立应用程序的更多内容请参考Rich Client Tutorial,这个教程共有三个部分,我当时就是通过它学习的,后来它按照RCP API的发展又及时更新了内容,是难得的入门材料。
发表评论
-
flex 电子书籍下载
2009-11-25 17:12 2144http://wmcai.blog.163.com/blog/ ... -
基于servlet导出Flex/Flash界面为图形文件的简单方法
2009-07-31 14:12 1655关键字: flex,chart,java 使用fl ... -
Flex 3的本地化应用
2009-07-20 13:30 1558这两天看了一下Flex 3的 ... -
FLEX组件的生命周期
2009-05-22 14:42 1648组件实例化生命周期描述了用组件类创建组件对象时所发生的一系列步 ... -
Flex性能优化之cpu占用率
2009-05-08 10:39 4830先扯几句,team中有一个正在试运行的项目,最近被客户打了 ... -
Understanding garbage collection in Flash Player 9
2009-05-06 19:19 1196原文 Understanding garbage ... -
关于firefox文本折行的问题
2009-04-13 14:57 1593一直有传说这个是firefox的一个bug,属于无法完美解决的 ... -
Adobekit教你如何修改FLASH右键菜单
2009-04-07 10:32 4904有些东西只有用到了才 ... -
CSS IE7 IE6 Firefox多浏览器兼容-著名的星号* Html Hack(招数)[z]
2009-04-01 10:08 2878From: [url]http://www.keephelp. ... -
Flex上载和下载文件
2009-01-20 14:28 5689示例:上载和下载文件 FileIO 示例说明了在 Flash ... -
Flex 2 中的元数据标签
2009-01-19 16:33 906原文作者:Rich Tretola(作者是everything ... -
理解ClassLoader机制
2009-01-18 23:09 1221当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初 ... -
一个简易实用的web权限管理模块的应用与实现
2009-01-18 21:59 1401本文介绍一个简易实用的web权限管理模块的应用与实现。 ... -
JS中Null与Undefined的区别
2009-01-04 17:40 2352在JavaScript中存在这样两种原始类型:Null与Und ... -
Flex3 framework RSL机制介绍
2008-12-25 17:45 2396阻碍Flex应用的一个很大因素就是采用Flex框架的程序体积非 ... -
IE6中用了float:left之后导致margin-left双倍边距的BUG解决方法
2008-12-22 17:17 5033先看css代码: div { float:left; ... -
Adobe Meermeer:跨浏览器网页测试工具
2008-12-09 09:24 1663每年Adobe公司都会有一个最具吸引力的项目,在2007年的会 ... -
网站性能优化
2008-12-03 17:59 971/** *作者:张荣华 *日期:2008-12-01 **/ ... -
openfire 源代码研究一 (运行环境的搭建)
2008-11-30 21:31 3320关于Openfire的介绍在此不多说了,网上有很多关于这个基于 ... -
FLEX3中应用CSS完全详解手册!
2008-11-21 14:13 1820编辑完这个FLEX下的CSS说明后,我基本已经兵临崩溃边缘了。 ...
相关推荐
4. **产品化**:将应用程序转换为产品,进行部署准备。 5. **打包与部署**:在 Eclipse 之外打包并部署 RCP 产品。 #### 创建基本的 RCP 应用程序 1. **打开 Eclipse**:启动 Eclipse 并打开新的项目。 2. **新建 ...
**Eclipse RCP**(Rich Client Platform)是一种构建丰富客户端应用程序的框架,它利用Eclipse平台的强大功能来创建高度定制化的桌面应用程序。通过RCP,开发者能够专注于业务逻辑而非繁琐的界面设计,极大地提高了...
Eclipse RCP(Rich Client Platform)是一个开源框架,用于构建桌面应用程序。它是Eclipse IDE的基础,提供了丰富的用户界面和插件扩展机制。本项目利用Eclipse RCP开发了一个工具,功能是从Excel电子表格中读取数据...
【标题】"eclipse RCP mp3工程"指的是一个基于Eclipse Rich Client Platform(RCP)构建的专门处理MP3音频文件的应用程序。Eclipse RCP是一个强大的开发框架,允许开发者创建桌面应用,它提供了丰富的用户界面组件和...
- **创建产品配置**:解释了如何为现有的插件项目创建产品配置文件,以便将其转换成一个完整的Eclipse RCP应用程序。 - **创建特征项目**:指导如何为该应用程序创建特征项目。 - **在产品配置中输入特征依赖项**:...
在IT行业中,Eclipse RCP(Rich Client Platform)是一种基于Java的框架,用于构建桌面应用程序。它提供了构建可扩展、模块化应用的基础。RCP应用通常由多个组件组成,而这些组件可以通过插件(Plugin)的形式进行...
1. **创建 RCP 项目**:在 Eclipse 中创建一个新的 RCP 项目,这将是应用程序的基础框架。 2. **定义应用程序结构**:规划应用程序的各个部分,包括菜单、工具栏、视图等。 3. **实现业务逻辑**:编写处理应用...
Eclipse RCP(Rich Client Platform)是一个开源的开发框架,由Eclipse基金会提供,用于构建桌面应用程序。在Eclipse RCP中,Common Navigator Framework (CNF) 是一个关键组件,它提供了一种灵活的方式来展示资源树...
本文将详细介绍如何将第三方JAR包转换为插件形式,并使其成为RCP工程的一部分。 #### 二、准备工作与环境搭建 在开始之前,请确保已经安装并配置好了Eclipse RCP开发环境。本教程将使用Eclipse作为开发工具,假设...
Eclipse RCP的核心概念是组件化,它通过插件系统实现了模块化的应用程序结构。每个插件代表应用程序的一个功能或一组相关功能,它们可以通过API互相通信。开发者可以基于Eclipse的插件模型来设计、实现和部署自己的...
Eclipse RCP(Rich Client Platform)是一个开源框架,由Eclipse基金会提供,用于构建桌面应用程序。这个框架基于Java,提供了一套完整的工具集,包括IDE、插件系统和UI组件,使得开发者能够快速构建功能丰富的跨...
Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它提供了一整套工具和功能,使得开发者可以构建出具有丰富用户界面的应用。在“Eclipse RCP 打印表格.zip”这个资源中,我们关注的是...
在Eclipse插件项目中引用第三方JAR包并解决空指针异常,是开发者经常会遇到的问题,特别是对于那些使用Eclipse RCP(Rich Client Platform)进行桌面应用开发的程序员。以下将详细介绍这个问题的解决方法以及相关...
Eclipse RCP是一个强大的框架,用于构建桌面应用程序,而属性视图则是展示对象属性的一种可视化组件。 首先,我们要理解适配器模式的核心思想。适配器模式通过创建一个适配器类,将旧的或不兼容的接口转换成我们...
它提供了拖放式的UI设计方式,使得开发Java Swing或JavaFX应用程序变得更加直观和高效。本文将详细介绍如何安装Eclipse的VE插件,并探讨相关知识点。 首先,安装Eclipse VE插件的步骤如下: 1. **准备工作**:确保...
Eclipse RCP(Rich Client Platform)是IBM公司开发的一个开源框架,用于构建桌面应用程序。它提供了丰富的用户界面组件和强大的插件系统,使得开发者能够快速地构建出功能强大的应用程序。在"eclipse RCP 模仿win7...
RAP将桌面应用的编程模型转换为适合Web的模型,使得开发者能够在熟悉的RCP环境中开发出高性能、响应迅速的Web应用。通过RWT(RAP Web Toolkit),RAP将Swing事件和组件映射到Web浏览器中的HTML和JavaScript。 该...
本文将深入探讨如何使用Eclipse插件来编程创建一个Java项目,并涉及将字符串转化为Java源文件及对应的.class编译文件。 首先,我们需要了解Eclipse插件开发的基础。Eclipse插件是基于OSGi(Open Service Gateway ...
Tycho的工作原理是通过Maven的生命周期和插件系统,将Eclipse插件和RCP应用的构建过程转换为标准的Maven构建流程。这使得开发者可以利用Maven的强大功能,如依赖管理和版本控制,来处理Eclipse插件的构建问题。由于...