在基于Eclipse 3.7平台构建的项目中,发现Problems视图图标显示异常:
解决方法:
首先在WorkbenchWindowAdvisor实现类中的preWindowOpen方法中调用:
IDE.registerAdapters();
这样就注册了各种适配器类,然后在WorkbenchAdvisor的实现类的initialize方法中初始化图片注册表,可以参考IDEWorkbenchAdvisor类中的initialize方法,
1 /** 2 * Declares all IDE-specific workbench images. This includes both "shared" 3 * images (named in {@link IDE.SharedImages}) and internal images (named in 4 * {@link org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages}). 5 * 6 * @see IWorkbenchConfigurer#declareImage 7 */ 8 private void declareWorkbenchImages() { 9 10 final String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$ 11 final String PATH_ELOCALTOOL = ICONS_PATH + "elcl16/"; // Enabled //$NON-NLS-1$ 12 13 // toolbar 14 // icons. 15 final String PATH_DLOCALTOOL = ICONS_PATH + "dlcl16/"; // Disabled //$NON-NLS-1$ 16 // //$NON-NLS-1$ 17 // toolbar 18 // icons. 19 final String PATH_ETOOL = ICONS_PATH + "etool16/"; // Enabled toolbar //$NON-NLS-1$ 20 // //$NON-NLS-1$ 21 // icons. 22 final String PATH_DTOOL = ICONS_PATH + "dtool16/"; // Disabled toolbar //$NON-NLS-1$ 23 // //$NON-NLS-1$ 24 // icons. 25 final String PATH_OBJECT = ICONS_PATH + "obj16/"; // Model object //$NON-NLS-1$ 26 // //$NON-NLS-1$ 27 // icons 28 final String PATH_WIZBAN = ICONS_PATH + "wizban/"; // Wizard //$NON-NLS-1$ 29 // //$NON-NLS-1$ 30 // icons 31 32 // View icons 33 final String PATH_EVIEW= ICONS_PATH + "eview16/"; //$NON-NLS-1$ 34 35 36 Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH); 37 38 declareWorkbenchImage(ideBundle, 39 IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC, PATH_ETOOL 40 + "build_exec.gif", false); //$NON-NLS-1$ 41 declareWorkbenchImage(ideBundle, 42 IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_HOVER, 43 PATH_ETOOL + "build_exec.gif", false); //$NON-NLS-1$ 44 declareWorkbenchImage(ideBundle, 45 IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_DISABLED, 46 PATH_DTOOL + "build_exec.gif", false); //$NON-NLS-1$ 47 48 declareWorkbenchImage(ideBundle, 49 IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC, PATH_ETOOL 50 + "search_src.gif", false); //$NON-NLS-1$ 51 declareWorkbenchImage(ideBundle, 52 IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_HOVER, 53 PATH_ETOOL + "search_src.gif", false); //$NON-NLS-1$ 54 declareWorkbenchImage(ideBundle, 55 IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_DISABLED, 56 PATH_DTOOL + "search_src.gif", false); //$NON-NLS-1$ 57 58 declareWorkbenchImage(ideBundle, 59 IDEInternalWorkbenchImages.IMG_ETOOL_NEXT_NAV, PATH_ETOOL 60 + "next_nav.gif", false); //$NON-NLS-1$ 61 62 declareWorkbenchImage(ideBundle, 63 IDEInternalWorkbenchImages.IMG_ETOOL_PREVIOUS_NAV, PATH_ETOOL 64 + "prev_nav.gif", false); //$NON-NLS-1$ 65 66 declareWorkbenchImage(ideBundle, 67 IDEInternalWorkbenchImages.IMG_WIZBAN_NEWPRJ_WIZ, PATH_WIZBAN 68 + "newprj_wiz.png", false); //$NON-NLS-1$ 69 declareWorkbenchImage(ideBundle, 70 IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFOLDER_WIZ, 71 PATH_WIZBAN + "newfolder_wiz.png", false); //$NON-NLS-1$ 72 declareWorkbenchImage(ideBundle, 73 IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFILE_WIZ, PATH_WIZBAN 74 + "newfile_wiz.png", false); //$NON-NLS-1$ 75 76 declareWorkbenchImage(ideBundle, 77 IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTDIR_WIZ, 78 PATH_WIZBAN + "importdir_wiz.png", false); //$NON-NLS-1$ 79 declareWorkbenchImage(ideBundle, 80 IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTZIP_WIZ, 81 PATH_WIZBAN + "importzip_wiz.png", false); //$NON-NLS-1$ 82 83 declareWorkbenchImage(ideBundle, 84 IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTDIR_WIZ, 85 PATH_WIZBAN + "exportdir_wiz.png", false); //$NON-NLS-1$ 86 declareWorkbenchImage(ideBundle, 87 IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTZIP_WIZ, 88 PATH_WIZBAN + "exportzip_wiz.png", false); //$NON-NLS-1$ 89 90 declareWorkbenchImage(ideBundle, 91 IDEInternalWorkbenchImages.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ, 92 PATH_WIZBAN + "workset_wiz.png", false); //$NON-NLS-1$ 93 94 declareWorkbenchImage(ideBundle, 95 IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG, PATH_WIZBAN 96 + "saveas_wiz.png", false); //$NON-NLS-1$ 97 98 declareWorkbenchImage(ideBundle, 99 IDEInternalWorkbenchImages.IMG_DLGBAN_QUICKFIX_DLG, PATH_WIZBAN 100 + "quick_fix.png", false); //$NON-NLS-1$ 101 102 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT, 103 PATH_OBJECT + "prj_obj.gif", true); //$NON-NLS-1$ 104 declareWorkbenchImage(ideBundle, 105 IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT 106 + "cprj_obj.gif", true); //$NON-NLS-1$ 107 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OPEN_MARKER, 108 PATH_ELOCALTOOL + "gotoobj_tsk.gif", true); //$NON-NLS-1$ 109 110 111 // Quick fix icons 112 declareWorkbenchImage(ideBundle, 113 IDEInternalWorkbenchImages.IMG_ELCL_QUICK_FIX_ENABLED, 114 PATH_ELOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$ 115 116 declareWorkbenchImage(ideBundle, 117 IDEInternalWorkbenchImages.IMG_DLCL_QUICK_FIX_DISABLED, 118 PATH_DLOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$ 119 120 declareWorkbenchImage(ideBundle, 121 IDEInternalWorkbenchImages.IMG_OBJS_FIXABLE_WARNING, 122 PATH_OBJECT + "quickfix_warning_obj.gif", true); //$NON-NLS-1$ 123 declareWorkbenchImage(ideBundle, 124 IDEInternalWorkbenchImages.IMG_OBJS_FIXABLE_ERROR, 125 PATH_OBJECT + "quickfix_error_obj.gif", true); //$NON-NLS-1$ 126 127 128 // task objects 129 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_HPRIO_TSK, 130 // PATH_OBJECT+"hprio_tsk.gif"); 131 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_MPRIO_TSK, 132 // PATH_OBJECT+"mprio_tsk.gif"); 133 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_LPRIO_TSK, 134 // PATH_OBJECT+"lprio_tsk.gif"); 135 136 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_TASK_TSK, 137 PATH_OBJECT + "taskmrk_tsk.gif", true); //$NON-NLS-1$ 138 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_BKMRK_TSK, 139 PATH_OBJECT + "bkmrk_tsk.gif", true); //$NON-NLS-1$ 140 141 declareWorkbenchImage(ideBundle, 142 IDEInternalWorkbenchImages.IMG_OBJS_COMPLETE_TSK, PATH_OBJECT 143 + "complete_tsk.gif", true); //$NON-NLS-1$ 144 declareWorkbenchImage(ideBundle, 145 IDEInternalWorkbenchImages.IMG_OBJS_INCOMPLETE_TSK, PATH_OBJECT 146 + "incomplete_tsk.gif", true); //$NON-NLS-1$ 147 declareWorkbenchImage(ideBundle, 148 IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_ITEM, PATH_OBJECT 149 + "welcome_item.gif", true); //$NON-NLS-1$ 150 declareWorkbenchImage(ideBundle, 151 IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_BANNER, PATH_OBJECT 152 + "welcome_banner.gif", true); //$NON-NLS-1$ 153 declareWorkbenchImage(ideBundle, 154 IDEInternalWorkbenchImages.IMG_OBJS_ERROR_PATH, PATH_OBJECT 155 + "error_tsk.gif", true); //$NON-NLS-1$ 156 declareWorkbenchImage(ideBundle, 157 IDEInternalWorkbenchImages.IMG_OBJS_WARNING_PATH, PATH_OBJECT 158 + "warn_tsk.gif", true); //$NON-NLS-1$ 159 declareWorkbenchImage(ideBundle, 160 IDEInternalWorkbenchImages.IMG_OBJS_INFO_PATH, PATH_OBJECT 161 + "info_tsk.gif", true); //$NON-NLS-1$ 162 163 declareWorkbenchImage(ideBundle, 164 IDEInternalWorkbenchImages.IMG_LCL_FLAT_LAYOUT, PATH_ELOCALTOOL 165 + "flatLayout.gif", true); //$NON-NLS-1$ 166 declareWorkbenchImage(ideBundle, 167 IDEInternalWorkbenchImages.IMG_LCL_HIERARCHICAL_LAYOUT, 168 PATH_ELOCALTOOL + "hierarchicalLayout.gif", true); //$NON-NLS-1$ 169 declareWorkbenchImage(ideBundle, 170 IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEM_CATEGORY, 171 PATH_ETOOL + "problem_category.gif", true); //$NON-NLS-1$ 172 173 declareWorkbenchImage(ideBundle, 174 IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW, 175 PATH_EVIEW + "problems_view.gif", true); //$NON-NLS-1$ 176 declareWorkbenchImage(ideBundle, 177 IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW_ERROR, 178 PATH_EVIEW + "problems_view_error.gif", true); //$NON-NLS-1$ 179 declareWorkbenchImage(ideBundle, 180 IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEMS_VIEW_WARNING, 181 PATH_EVIEW + "problems_view_warning.gif", true); //$NON-NLS-1$ 182 183 // synchronization indicator objects 184 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_WBET_STAT, 185 // PATH_OVERLAY+"wbet_stat.gif"); 186 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_SBET_STAT, 187 // PATH_OVERLAY+"sbet_stat.gif"); 188 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_CONFLICT_STAT, 189 // PATH_OVERLAY+"conflict_stat.gif"); 190 191 // content locality indicator objects 192 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_NOTLOCAL_STAT, 193 // PATH_STAT+"notlocal_stat.gif"); 194 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_LOCAL_STAT, 195 // PATH_STAT+"local_stat.gif"); 196 // declareRegistryImage(IDEInternalWorkbenchImages.IMG_OBJS_FILLLOCAL_STAT, 197 // PATH_STAT+"filllocal_stat.gif"); 198 } 199 200 /** 201 * Declares an IDE-specific workbench image. 202 * 203 * @param symbolicName 204 * the symbolic name of the image 205 * @param path 206 * the path of the image file; this path is relative to the base 207 * of the IDE plug-in 208 * @param shared 209 * <code>true</code> if this is a shared image, and 210 * <code>false</code> if this is not a shared image 211 * @see IWorkbenchConfigurer#declareImage 212 */ 213 private void declareWorkbenchImage(Bundle ideBundle, String symbolicName, 214 String path, boolean shared) { 215 URL url = FileLocator.find(ideBundle, new Path(path), null); 216 ImageDescriptor desc = ImageDescriptor.createFromURL(url); 217 getWorkbenchConfigurer().declareImage(symbolicName, desc, shared); 218 }
将上述代码复制到WorkbenchAdvisor实现类中,然后在initialize方法中调用declareWorkbenchImages方法就行了
@Override public void initialize(IWorkbenchConfigurer configurer) { super.initialize(configurer); declareWorkbenchImages(); }