自己遇到了這方面問題,在瀚海星云上咨詢了一下,解決后總結了一下。現在收錄到自己的空間里:)
前段時間為了使用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()方法用來解決圖標的問題。
實現如下:

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是在為ide服務的,所以在重用組件時遇到的問題應該可以在eclipse源碼中找到
答案。