`
zhaozhongwei
  • 浏览: 52498 次
  • 性别: 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  
今天也遇到这个问题了,,,,
这个方法可以解决。。。

相关推荐

Global site tag (gtag.js) - Google Analytics