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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值