`
zhaozhongwei
  • 浏览: 54048 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

rcp中新建工程没有图标解决方案

阅读更多

在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,一切正常!

2
0
分享到:
评论
2 楼 imu2008 2014-05-15  
嗯,此方法可用。好文。mark
1 楼 553563608 2011-12-15  
今天也遇到这个问题了,,,,
这个方法可以解决。。。

相关推荐

    导入RCP工程SuperCRM遇到的bug问题解决方案

    ECLIPSE+SWTJFACE核心应用 附有案例的源代码光盘Eclipse+SWT+JFace核心应用光盘,其中工程SuperCRM是一个比较完整的介绍RCP应用的项目,但是在真正运行该工程时,却存在许多bug问题,本人通过调试解决了上述问题,...

    eclipse RCP mp3工程

    【描述】中的“非常棒的一个rcp应用程序”意味着这个工程展示了Eclipse RCP的强大功能和易用性,可能是通过集成MP3播放、管理、编辑等功能来实现的。"学习学习,快来下"则提示这个项目适合学习Eclipse RCP的开发者,...

    rcp工程的描述

    Eclipse RCP中的插件是程序的基本构建块,它们提供了可重用和可扩展的组件。每个插件都有自己的类路径、资源和扩展点,可以独立于其他插件进行开发。插件之间通过API相互交互,实现功能集成。例如,一个插件可能负责...

    Eclipse RCP中使用第三方包

    Eclipse RCP中使用第三方包 Eclipse RCP(Rich Client Platform)是一种基于Java的插件式软件架构,允许开发者创建跨平台的桌面应用程序。使用Eclipse RCP,可以快速构建功能强大的客户端应用程序。然而,在实际...

    RCP中文入门教程.rar

    1. **插件(Plugin)**:在RCP中,一切皆插件。插件是RCP的基本构建单元,每个插件都包含一组相关的功能。开发者可以通过编写插件来添加新的功能或者扩展已有功能。 2. **工作台(Workbench)**:工作台是RCP应用的...

    eclipse RCP 数独工程

    尽管这个文件名没有直接与Eclipse RCP或数独游戏关联,但可能意味着在项目中使用了IBM的XML处理技术,用于数据存储或解析。例如,数独游戏的解决方案或用户输入可能会被序列化为XML格式,便于存储和传输。 综合以上...

    java中RCP中使用JNI

    在Java RCP中使用JNI,主要是为了访问特定于平台的功能,提升性能,或者调用已有的本地库。 1. **JNI简介** JNI是一种接口,允许Java代码与其他语言编写的代码进行通信。它定义了一套规范,使得Java虚拟机(JVM)...

    eclipse icons,用来开发rcp桌面应用程序

    Eclipse Icons是Eclipse RCP(Rich Client Platform)开发中常用的一套图形用户界面资源,它们为Eclipse RCP应用程序提供了丰富的图标集,用于构建视觉上吸引人的且易于理解的用户界面。Eclipse RCP是一种基于Java的...

    RCP,RCP开发

    在RCP中,OSGI作为底层的模块化框架,为RCP提供了动态加载和管理插件的能力。开发者可以通过创建OSGI Bundle来构建RCP插件,这些插件可以在运行时被RCP框架动态加载和卸载。这种结合使得RCP应用具备了高度的灵活性和...

    rcp自己通过扩展点新建java项目

    在Eclipse RCP(Rich Client Platform)开发中,创建自定义的新建项目向导是提升用户体验和增强应用程序功能的重要步骤。`rcp自己通过扩展点新建java项目`这个主题涉及了如何利用Eclipse的插件体系和扩展点机制来...

    在RCP中显示JFreeChart报表

    在本文中,我们将深入探讨如何在Eclipse Rich Client Platform (RCP)应用程序中集成和显示JFreeChart报表。JFreeChart是一个强大的Java库,用于创建各种图表类型,如折线图、柱状图、饼图等,而RCP是Eclipse框架的一...

    Eclipse-RCP中文入门教程

    新建插件工程 - **启动Eclipse**:首先打开Eclipse IDE。 - **创建插件项目**:从`File`菜单中选择`New` -> `Project` -> `Plug-in Development` -> `Plug-in Project`。 - **填写项目名称**:例如命名为`...

    RCP-1500中文操作手册.pdf

    索尼公司生产的RCP-1500系列遥控面板(包括RCP-1500、RCP-1501和RCP-1530型号)是用于配置和控制演播室级及广播级摄像机的专业设备。这些设备提供了高级的操作便利性和功能的多样性,使得用户能够高效地进行摄影机的...

    RCP工程转成RAP,并在浏览器中运行

    - 删除"org.eclipse.core.runtime.applications"扩展点,因为它对应于RCP中的IApplication,而在RAP中,应用启动通过"org.eclipse.rap.ui.entrypoint"扩展点进行。 - 新增"org.eclipse.rap.ui.entrypoint"扩展点,...

    RCP程序中集成其他插件的配置方法

    在RCP中集成新插件的过程主要涉及以下几个步骤: 1. **创建插件项目**: 在Eclipse IDE中,你可以使用“New -> Plugin Project”向导来创建一个新的插件项目。在向导中,填写项目的名称、供应商信息等,并选择所需...

    RCP 嵌入Google map(rcp执行JavaScrit方法,解决打包后路径问题)

    本文将深入探讨如何在RCP应用中实现这一功能,以及如何解决打包后JavaScript方法调用及资源路径的问题。 首先,集成Google Maps通常涉及到以下几个步骤: 1. 获取API密钥:在Google Cloud Console中创建一个新的...

    RCP 中文文档

    4. **透视图(Perspective)**:透视图是RCP中的一个重要概念,它定义了一组视图和编辑器的排列方式,用于组织和展示不同任务的工作空间。 5. **视图(View)**:视图是用户界面中显示特定信息或功能的部分,如日历...

Global site tag (gtag.js) - Google Analytics