`
hiwings
  • 浏览: 60099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java工程没有图标

 
阅读更多

http://zhaozhongwei.iteye.com/blog/305824

http://www.blogjava.net/USTCEric/archive/2006/01/08/27141.html

 

 

第一篇:

在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插件下,而代码也用到了这个插件,所以要在依赖里家上这个插件。

 写道
private void declareWorkbenchImages() {

final String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$
final String PATH_ELOCALTOOL = ICONS_PATH + "elcl16/"; //Enabled
toolbar icons.//$NON-NLS-1$
final String PATH_ETOOL = ICONS_PATH + "etool16/"; //Enabled toolbar
icons.//$NON-NLS-1$
final String PATH_DTOOL = ICONS_PATH + "dtool16/"; //Disabled
toolbar icons.//$NON-NLS-1$
final String PATH_OBJECT = ICONS_PATH + "obj16/"; //Model object
icons//$NON-NLS-1$
final String PATH_WIZBAN = ICONS_PATH + "wizban/"; //Wizard
icons//$NON-NLS-1$

Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC, PATH_ETOOL
+ "build_exec.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_HOVER,
PATH_ETOOL + "build_exec.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_DISABLED,
PATH_DTOOL + "build_exec.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC, PATH_ETOOL
+ "search_src.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_HOVER,
PATH_ETOOL + "search_src.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_DISABLED,
PATH_DTOOL + "search_src.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_NEXT_NAV, PATH_ETOOL
+ "next_nav.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_PREVIOUS_NAV, PATH_ETOOL
+ "prev_nav.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_NEWPRJ_WIZ, PATH_WIZBAN
+ "newprj_wiz.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFOLDER_WIZ,
PATH_WIZBAN + "newfolder_wiz.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFILE_WIZ, PATH_WIZBAN
+ "newfile_wiz.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTDIR_WIZ,
PATH_WIZBAN + "importdir_wiz.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTZIP_WIZ,
PATH_WIZBAN + "importzip_wiz.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTDIR_WIZ,
PATH_WIZBAN + "exportdir_wiz.gif", false); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTZIP_WIZ,
PATH_WIZBAN + "exportzip_wiz.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ,
PATH_WIZBAN + "workset_wiz.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG,
PATH_WIZBAN + "saveas_wiz.gif", false); //$NON-NLS-1$

declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT,
PATH_OBJECT + "prj_obj.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
+ "cprj_obj.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OPEN_MARKER,
PATH_ELOCALTOOL + "gotoobj_tsk.gif", true); //$NON-NLS-1$

// task objects

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_HPRIO_TSK,
PATH_OBJECT+"hprio_tsk.gif");

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_MPRIO_TSK,
PATH_OBJECT+"mprio_tsk.gif");

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_LPRIO_TSK,
PATH_OBJECT+"lprio_tsk.gif");

declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_TASK_TSK,
PATH_OBJECT + "taskmrk_tsk.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_BKMRK_TSK,
PATH_OBJECT + "bkmrk_tsk.gif", true); //$NON-NLS-1$

declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_OBJS_COMPLETE_TSK, PATH_OBJECT
+ "complete_tsk.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_OBJS_INCOMPLETE_TSK, PATH_OBJECT
+ "incomplete_tsk.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_ITEM, PATH_OBJECT
+ "welcome_item.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_BANNER, PATH_OBJECT
+ "welcome_banner.gif", true); //$NON-NLS-1$

// synchronization indicator objects

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_WBET_STAT,
PATH_OVERLAY+"wbet_stat.gif");

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_SBET_STAT,
PATH_OVERLAY+"sbet_stat.gif");

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_CONFLICT_STAT,
PATH_OVERLAY+"conflict_stat.gif");

// content locality indicator objects

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_NOTLOCAL_STAT,
PATH_STAT+"notlocal_stat.gif");

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_LOCAL_STAT,
PATH_STAT+"local_stat.gif");

//declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_FILLLOCAL_STAT,
PATH_STAT+"filllocal_stat.gif");
}

/**
* Declares an IDE-specific workbench image.
*
* @param symbolicName the symbolic name of the image
* @param path the path of the image file; this path is relative to the base
* of the IDE plug-in
* @param shared <code>true</code> if this is a shared image, and
* <code>false</code> if this is not a shared image
* @see IWorkbenchConfigurer#declareImage
*/
private void declareWorkbenchImage(Bundle ideBundle, String symbolicName,
String path, boolean shared) {
URL url = Platform.find(ideBundle, new Path(path));
ImageDescriptor desc = ImageDescriptor.createFromURL(url);
getWorkbenchConfigurer().declareImage(symbolicName, desc, shared);
}
 

第二篇:

 自己遇到了这方面问题,在瀚海星云上咨询了一下,解决后总结了一下。现在收录到自己的空间里:)

 前段时间为了使用jdt中的package explorer进行一个rcp程序的开发。在版面上进行了
提问,得到了simon lei,pandawang 的热情帮助,在此表示感谢。经过一番学习,在几个论
坛上问了一下,当时仍没有找到解决方法(主要是使用package explorer时项目和文件
夹的显示问题),又看到rcp的faq中有reusable 的说法就得出不能在rcp中复用jdt组件
的结论。实际上这个结论是错误的,只要提供相关的插件支持是可以重用jdt中组件的,
我再一次重复这个问题是为了避免我那个回帖误导别人。

我在rcp的perspective中用addview加入package explorer是没有问题的,之所以不能显
示项目名称是因为没有注册相关的adapter。

只要在workbenchadvisor中的initialize方法中加入:
WorkbenchAdapterBuilder.registerAdapters();
declareWorkbenchImages();
就可以解决问题。WorkbenchAdapterBuilder是org.eclipse.ui.ide中的类,用
registerAdapters方法注册adapter后就可以正常显示项目名称以及文件夹名称,但是这
时候还不能显示相关的图标。
declareWorkbenchImages()方法用来解决图标的问题。

分享到:
评论

相关推荐

    java工程实训.zip

    【Java工程实训.zip】是一个包含Java GUI编程和数据库操作的学习资源包,主要目的是为了帮助初学者理解并实践如何创建一个简单的水果操作系统。该系统可能涉及水果超市的进货管理,包括基本的创建(Create)、读取...

    JAVA简易编译器不需创建工程速度快

    4. "jre":这个文件夹很可能包含了Java运行时环境(Java Runtime Environment),即使没有独立安装JRE,用户也能通过这个编译器运行Java程序。 总结来说,这个“JAVA简易编译器”是一款为Java开发者设计的轻量级IDE...

    JAVA工程师个人简历中的项目经验范文.docx

    【Java工程师个人简历中的项目经验】在撰写Java工程师的简历时,项目经验部分是至关重要的,因为它展示了候选人的实际操作能力和技术专长。以下是一些关键的知识点: 1. **国产中间件参考实现及平台软件**:这涉及...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    Matlab与java接口(图文并茂)

    本文将详细阐述配置要求、环境配置、Java Builder的使用以及在Java工程中调用Matlab组件的关键步骤。 一、配置要求 要成功建立Matlab与Java的接口,首先需要满足以下条件: 1. MATLAB版本:至少要求R2006b(MATLAB ...

    SVG格式转成PDF——Java工程

    本Java工程专注于将SVG图像转换为PDF,同时也具备合并PDF文件的功能。 在SVG转PDF的过程中,主要涉及到以下几个关键知识点: 1. **SVG解析**:首先,我们需要解析SVG文件,提取其包含的几何形状、颜色、文本等信息...

    java模仿window平台的NotePad,编写的一个简单的“记事本”程序

    发布者将这段代码整合成一个完整的Java工程,以便其他人可以更方便地下载、运行和学习。同时,发布者也明确表示对代码的所有权不做主张,这符合开源和分享的精神。 【标签解析】 标签包括"JAVA"、"NotePad"、...

    java 工程生成批处理和生成EXE

    标题 "Java工程生成批处理和生成EXE" 涉及到的是如何将Java应用程序转换为批处理命令(bat文件)以及如何将其封装为可执行文件(exe)。这对于那些希望在不安装Java环境的计算机上运行Java程序的用户非常有用。下面...

    完整jquery UI后台系统原型java工程

    **jQuery UI 后台系统原型Java工程** 在IT领域,jQuery UI是一个强大的JavaScript库,它扩展了基础的jQuery库,提供了丰富的用户界面组件。这个"完整jQuery UI后台系统原型Java工程"是一个基于jQuery UI的解决方案...

    Android Studio的Java小工程

    2. **项目结构**:Android Studio会自动生成一个标准的项目结构,包括`app`模块,其中包含`src/main/java`目录用于存放Java源代码,`src/main/res`用于存放资源文件,如布局、图标等。 3. **编写Java代码**:在`...

    Java_Swing_KTV工程

    这个"Java_Swing_KTV工程"显然是一款基于Swing构建的KTV管理系统的前端界面。下面,我们将深入探讨Java Swing、KTV管理系统以及如何通过Swing创建美观的用户界面。 Swing是Java的标准GUI库,它是Java Foundation ...

    java项目管理系统源码

    2.主页:进入主页后可以点击左侧项目信息管理、资源信息管理、进度信息管理、个人密码修改等图标,进入相应的管理页面 3.项目管理:本模块实现对企业项目信息的管理操作,包括企业项目信息的添加、删除操作。 4.项目...

    咖啡图形的java反编译工具(实用)

    Java反编译是将已编译的Java字节码(.class文件)转换回源代码(.java文件)的过程,这对于理解已加密或混淆的代码、逆向工程库或者研究软件内部工作原理非常有用。这款名为“咖啡图形的java反编译工具”很可能是一...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java工程打jar包,制作exe文件

    一、打包Java工程为JAR文件 1. **配置Manifest文件**:在项目根目录下创建`META-INF/MANIFEST.MF`文件,声明主类(Main-Class),例如: ``` Manifest-Version: 1.0 Main-Class: com.example.YourMainClass ```...

    高德地图全套图标.zip

    每一种图标都是精心设计的,符合人体工程学原理,易于识别,同时也符合高德地图的品牌风格。 开发者可以利用这些图标来定制自己的地图应用,无论是移动应用还是网页应用,都能使用户界面更加专业和易用。例如,当...

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    重庆理工大学java web期末大作业 耀炎食品网站

    这个项目是一个基于Java Web技术的期末工程作业,其目标是构建一个名为“耀炎食品网站”的在线平台。这个平台可能涵盖了用户注册登录、商品展示、购物车功能、订单处理等一系列电子商务的基本流程。在Java Web开发中...

    Eclipse中常见图标说明

    - **Java Scrapbook Page(*.jpage 文件)**:用于快速测试Java表达式的页面,正在执行评估时会有特定图标。 - **JAR Description File**:描述JAR文件的元数据信息。 2. **Build Path**: - **Java Working Set...

    图标素材, 软件开发界面图标

    同时,图标的设计也应符合人机工程学,考虑用户的直觉理解,避免过于抽象或复杂的图形,以免引起用户的困惑。 此外,对于软件开发人员来说,了解如何将图标素材整合到代码中也非常重要。这可能涉及到使用图形编辑...

Global site tag (gtag.js) - Google Analytics