在rcp中(我的环境是eclipse3.4),有的时候需要建立工程,但是默认情况下建立的工程的图片显示不出来(包视图里出现这种情况,别的视图不清楚),这里拿新建java工程举例。
在获得图片的时候,程序会调用到org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider类的getBaseImageDescriptor方法,在288行(版本不同会有细微差别)有类似如下代码。
case IJavaElement.JAVA_PROJECT:
IJavaProject jp= (IJavaProject)element;
if (jp.getProject().isOpen()) {
IProject project= jp.getProject();
IWorkbenchAdapter adapter= (IWorkbenchAdapter)project.getAdapter(IWorkbenchAdapter.class);
if (adapter != null) {
ImageDescriptor result= adapter.getImageDescriptor(project);
if (result != null)
return result;
}
return DESC_OBJ_PROJECT;
}
。。。
如果跟到这里,会发现adapter 的值为null,而正常情况下这个adapter数有值的。
在rcp中生成的ApplicationWorkbenchAdvisor的preWindowOpen方法里面会生成
WorkbenchAdapterBuilder.registerAdapters();
但是我用debug发现在eclipse3.4里面,preWindowOpen方法没被调用,导致WorkbenchAdapterBuilder.registerAdapters();没被执行,从而导致adapter 的值为null。这样工程的前面没有图片,会出现一小块空白!把WorkbenchAdapterBuilder.registerAdapters();加到ApplicationWorkbenchAdvisor类的initialize方法里会解决这个问题,默认不生成initialize方法,所以要重载该方法,如下
@Override
public void initialize(IWorkbenchConfigurer configurer) {
// TODO Auto-generated method stub
super.initialize(configurer);
WorkbenchAdapterBuilder.registerAdapters();
}
经过这样的修改后会看到,工程的前面是个红色的图片(没找到对应图片的标志),在这个红图片的右上角有一个J(代表是java工程),这是因为eclipse调用的是org.eclipse.ui.internal.ide.application.IDEApplication(在org.eclipse.ui.ide.application插件下),而我们的rcp会调用我们的Application
IDEApplication的start方法代码中有如下代码片段
int returnCode = PlatformUI.createAndRunWorkbench(display,
new IDEWorkbenchAdvisor());
IDEWorkbenchAdvisor类中的initialize方法会调用
// register shared images
declareWorkbenchImages();
而declareWorkbenchImages个方法就是工程等图片被注册的地方!所以我们要做的就是把declareWorkbenchImages这个方法里的代码全部复制到我们的ApplicationWorkbenchAdvisor类里,然后在initialize方法里调用就可以了,因为图片都是在org.eclipse.ui.ide.application插件下,而代码也用到了这个插件,所以要在依赖里家上这个插件。
然后在运行一下rcp,一切正常!
分享到:
相关推荐
ECLIPSE+SWTJFACE核心应用 附有案例的源代码光盘Eclipse+SWT+JFace核心应用光盘,其中工程SuperCRM是一个比较完整的介绍RCP应用的项目,但是在真正运行该工程时,却存在许多bug问题,本人通过调试解决了上述问题,...
【描述】中的“非常棒的一个rcp应用程序”意味着这个工程展示了Eclipse RCP的强大功能和易用性,可能是通过集成MP3播放、管理、编辑等功能来实现的。"学习学习,快来下"则提示这个项目适合学习Eclipse RCP的开发者,...
Eclipse RCP中的插件是程序的基本构建块,它们提供了可重用和可扩展的组件。每个插件都有自己的类路径、资源和扩展点,可以独立于其他插件进行开发。插件之间通过API相互交互,实现功能集成。例如,一个插件可能负责...
Eclipse RCP中使用第三方包 Eclipse RCP(Rich Client Platform)是一种基于Java的插件式软件架构,允许开发者创建跨平台的桌面应用程序。使用Eclipse RCP,可以快速构建功能强大的客户端应用程序。然而,在实际...
1. **插件(Plugin)**:在RCP中,一切皆插件。插件是RCP的基本构建单元,每个插件都包含一组相关的功能。开发者可以通过编写插件来添加新的功能或者扩展已有功能。 2. **工作台(Workbench)**:工作台是RCP应用的...
尽管这个文件名没有直接与Eclipse RCP或数独游戏关联,但可能意味着在项目中使用了IBM的XML处理技术,用于数据存储或解析。例如,数独游戏的解决方案或用户输入可能会被序列化为XML格式,便于存储和传输。 综合以上...
在Java RCP中使用JNI,主要是为了访问特定于平台的功能,提升性能,或者调用已有的本地库。 1. **JNI简介** JNI是一种接口,允许Java代码与其他语言编写的代码进行通信。它定义了一套规范,使得Java虚拟机(JVM)...
Eclipse Icons是Eclipse RCP(Rich Client Platform)开发中常用的一套图形用户界面资源,它们为Eclipse RCP应用程序提供了丰富的图标集,用于构建视觉上吸引人的且易于理解的用户界面。Eclipse RCP是一种基于Java的...
在RCP中,OSGI作为底层的模块化框架,为RCP提供了动态加载和管理插件的能力。开发者可以通过创建OSGI Bundle来构建RCP插件,这些插件可以在运行时被RCP框架动态加载和卸载。这种结合使得RCP应用具备了高度的灵活性和...
在Eclipse RCP(Rich Client Platform)开发中,创建自定义的新建项目向导是提升用户体验和增强应用程序功能的重要步骤。`rcp自己通过扩展点新建java项目`这个主题涉及了如何利用Eclipse的插件体系和扩展点机制来...
在本文中,我们将深入探讨如何在Eclipse Rich Client Platform (RCP)应用程序中集成和显示JFreeChart报表。JFreeChart是一个强大的Java库,用于创建各种图表类型,如折线图、柱状图、饼图等,而RCP是Eclipse框架的一...
新建插件工程 - **启动Eclipse**:首先打开Eclipse IDE。 - **创建插件项目**:从`File`菜单中选择`New` -> `Project` -> `Plug-in Development` -> `Plug-in Project`。 - **填写项目名称**:例如命名为`...
索尼公司生产的RCP-1500系列遥控面板(包括RCP-1500、RCP-1501和RCP-1530型号)是用于配置和控制演播室级及广播级摄像机的专业设备。这些设备提供了高级的操作便利性和功能的多样性,使得用户能够高效地进行摄影机的...
- 删除"org.eclipse.core.runtime.applications"扩展点,因为它对应于RCP中的IApplication,而在RAP中,应用启动通过"org.eclipse.rap.ui.entrypoint"扩展点进行。 - 新增"org.eclipse.rap.ui.entrypoint"扩展点,...
在RCP中集成新插件的过程主要涉及以下几个步骤: 1. **创建插件项目**: 在Eclipse IDE中,你可以使用“New -> Plugin Project”向导来创建一个新的插件项目。在向导中,填写项目的名称、供应商信息等,并选择所需...
本文将深入探讨如何在RCP应用中实现这一功能,以及如何解决打包后JavaScript方法调用及资源路径的问题。 首先,集成Google Maps通常涉及到以下几个步骤: 1. 获取API密钥:在Google Cloud Console中创建一个新的...
4. **透视图(Perspective)**:透视图是RCP中的一个重要概念,它定义了一组视图和编辑器的排列方式,用于组织和展示不同任务的工作空间。 5. **视图(View)**:视图是用户界面中显示特定信息或功能的部分,如日历...