目录
1、前言
事实上,只要是基于Eclipse RCP平台的桌面应用,都有相同启动流程。当然,这也包括Vector公司的Davinci Configurator工具。本文继续以hellobeijing项目为例,深入探讨Eclipse RCP平台的启动流程。
在汽车工具链软件中,大部分都是基于Eclipse RCP平台开展二次开发。如在AUTOSAR配置工具中,Vector公司的Davinci Configurator,ETAS公司的RTA-CAR ISOLAR AB,Elektrobit公司的Tresos等;在通用编译器中,HighTec公司的HighTec,NXP公司的CodeWarrior和S32Design Studio,TI公司的Code Composer Studio等。
汽车基础软件,公众号:汽车基础软件来白嫖了!基于Eclipse RCP平台的汽车工具链软件开发方法(系列教程)
2、启动时序图
不啰嗦,直接上图!
这张UML时序图清晰展示hellobeijing项目的内部运行流程,而时序图中的多个参与者(participant)正是在src文件中的java文件。
在前文中,笔者提到src文件夹内放置项目源码,用于实现相应的控制逻辑。
src文件夹中放置本项目的源码,实现相应的控制逻辑。
汽车基础软件,公众号:汽车基础软件从Eclipse RCP平台的hellobeijing案例开启汽车工具链软件自研之旅
3、程序入口
首先,笔者将讲解为什么在用户点击“Launch an Eclipse application”按钮后,Eclipse RCP应用自动进入HelloBeijingApplication.java文件的start()函数。
单击“Launch an Eclipse application”以开始项目运行,或者单击“Launch an Eclipse application in Debug mode”以开始项目调试。
汽车基础软件,公众号:汽车基础软件从Eclipse RCP平台的hellobeijing案例开启汽车工具链软件自研之旅
1,在菜单Run,点击Run Configurations...
2,在弹出对话框中,记住红框中的Run as application选项的值是com.basicsw.hellobeijing.application,然后,关闭此对话框。
注意,勾选蓝色框中的Clear复选框,确保每次运行时都以空的工作空间启动应用。
3,点击“工程浏览”栏的plugin.xml文件,并选中Extension标签。然后,在All Extensions栏目中选中org.eclipse.core.runtime.applications。注意到,此时ID的值正是application,而上步中Run as application选项的值也恰好是com.basicsw.hellobeijing.application。所以,当用户选择Run as application时,Eclipse RCP应用必然会跳转到由org.eclipse.core.runtime.applications的ID属性所描述的入口。
4,点击org.eclipse.core.runtime.applications的application节点,看到run参数的class正是com.basicsw.hellobeijing.HelloBeijingApplication,也就是指向HelloBeijingApplication.java。
可能读者有疑问,为什么Application的名字是HelloBeijingApplication?因为笔者在前文做了特殊设置。
6,在弹出的Single View RCP application向导对话框中,修改Application class的值为HelloBeijingApplication,其它默认保持不变,点击Finish按钮。
汽车基础软件,公众号:汽车基础软件从Eclipse RCP平台的hellobeijing案例开启汽车工具链软件自研之旅
4、流程控制
接下来,笔者将逐一介绍src文件夹中除Activator.java和View.java外的全部文件的控制逻辑。
序号 | 类名 | 功能 |
1 | HelloBeijingApplication | 程序入口 |
2 | ApplicationWorkbenchAdvisor | 负责工作台生命周期管理 |
3 | ApplicationWorkbenchWindowAdvisor | 负责工作台窗口生命周期管理 |
4 | ApplicationActionBarAdvisor | 负责工作台行为栏管理 |
5 | Perspective | 默认透视图,负责界面布局的安排 |
1,HelloBeijingApplication.javaHelloBeijingApplication类正是Eclipse RCP程序的入口,它实现了IApplication接口。在RCP程序启动时,会执行该接口的start()方法;在程序停止时,会执行该接口的stop()方法。PlatformUI.createAndRunWorkbench()方法用来启动工作台,打开应用程序的主窗口,并处于持续打开状态。应用程序开始处理用户的鼠标单击、鼠标移动、按键等各种事件,一直到用户关闭程序退出,这就是所谓的事件循环。
2,ApplicationWorkbenchAdvisor.java
package com.basicsw.hellobeijing;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
private static final String PERSPECTIVE_ID = "com.basicsw.hellobeijing.perspective";
@Override
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
return new ApplicationWorkbenchWindowAdvisor(configurer);
}
@Override
public String getInitialWindowPerspectiveId() {
return PERSPECTIVE_ID;
}
}
ApplicationWorkbenchAdvisor 继承自WorkbenchAdvisor类,类负责工作台生命周期管理,它告诉工作台如何行动,即如何做、做什么。在工作台的生命周期内可以调用一些辅助方法,这些方法可以在该类中被重写,常见的方法有initialize()、preStartup()、postStartup()、 preShutdown()、postShutdown()等,具体请参考Eclipse官方文档。
3,ApplicationWorkbenchWindowAdvisor.java
package com.basicsw.hellobeijing;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
@Override
public ActionBarAdvisor createActionBarAdvisor(
IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
@Override
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(400, 300));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setTitle("RCP Application");
}
}
ApplicationWorkbenchWindowAdvisor 类负责应用程序窗口生命周期的管理,该类扩展自WorkbenchWindowAdvisor。每个应用程序都需要一个WorkbenchWindowAdvisor来控制窗口在生命周期中的大小、标题、位置等。读者可自行替换"RCP Application"为其它字符串,并运行hellobeijing项目,查看修改效果。
4,ApplicationActionBarAdvisor.java
package com.basicsw.hellobeijing;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
/**
* An action bar advisor is responsible for creating, adding, and disposing of
* the actions added to a workbench window. Each window will be populated with
* new actions.
*/
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
// Actions - important to allocate these only in makeActions, and then use
// them
// in the fill methods. This ensures that the actions aren't recreated
// when fillActionBars is called with FILL_PROXY.
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
}
ApplicationActionBarAdvisor类扩展自 ActionBarAdvisor,用于构建菜单栏、工具栏和状态栏。ActionBarAdvisor的主要方法是fillActionBars(),在该方法中调用makeActions(),fillMenuBar(),fillCoolBar()和fillStatusLine()等方法实现菜单栏或工具链动作设置,菜单栏填充,工具栏填充,以及状态栏填充等功能。
5,Perspective.java
package com.basicsw.hellobeijing;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
public class Perspective implements IPerspectiveFactory {
@Override
public void createInitialLayout(IPageLayout layout) {
layout.setEditorAreaVisible(false);
layout.setFixed(true);
}
}
Perspective主要负责工作台中默认页面布局的安排。当前,编辑区域设置为不可见,读者可自行修改false为true,并运行hellobeijing项目,查看修改效果。
5、疑问和困惑
最后,读者可能有疑问,在createInitialLayout()中并没有设置页面的代码,那为什么hellobeijing项目运行后,怎么会有一个用红框圈出的“View”页面呢?笔者将在后续贴文中为读者解密。
6、总结
为积极响应Eclipse软件定义汽车工作组倡导的开源精神,考虑到在中文语法环境中Eclipse RCP平台的开发资料极度稀缺,汽车基础软件公众号陆续发布一系列的原创文章,深入介绍基于Eclipse RCP平台的汽车工具链软件开发方法,敬请关注微信公众号以获取更多精彩内容。