2013-02-03 85 views
1

我在Eclipse中開發了一個插件,它爲Package Explorer添加了一個用於搜索類的選項。所以插件搜索類並返回類路徑。然後它應該在探險家中突出顯示該課程。 。突出顯示包資源管理器中的文件

我用這個:

IPath iPath = new Path(path); 
         IFile file = project.getFile(iPath); 

         file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(iPath); 

         ISelection selection = new StructuredSelection(file); 

         IViewReference[] views = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences(); 
         PlatformUI.getWorkbench().getActiveWorkbenchWindow() 
         .getActivePage().resetPerspective(); 
         for(IViewReference view:views){ 
          if("org.eclipse.jdt.ui.PackageExplorer".equals(view.getId())){ 
           IViewPart pExplorer = view.getView(true); 
           pExplorer.getViewSite().getSelectionProvider().setSelection(selection); 
           break; 
          } 
         } 

然而,這將返回該行一個NullPointerException: IViewReference []視圖= PlatformUI.getWorkbench()getActiveWorkbenchWindow()getActivePage()getViewReferences();

任何提示或幫助,將不勝感激。


感謝您的評論..現在我的問題是,此代碼不會突出顯示在我的資源管理器中的類!

String path = "D:\\Programs\\eclipse\\runtime-EclipseApplication\\tessssst\\src\\testClass.java"; 

    IPath iPath = new Path(path); 
    IFile file = project.getFile(iPath); 

    file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(iPath); 

    ISelection selection = new StructuredSelection(file); 

    IViewReference[] views = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences(); 
    PlatformUI.getWorkbench().getActiveWorkbenchWindow() 
    .getActivePage().resetPerspective(); 
    for(IViewReference view:views){ 
     if("org.eclipse.jdt.ui.PackageExplorer".equals(view.getId())){ 
      IViewPart pExplorer = view.getView(true); 
      pExplorer.getViewSite().getSelectionProvider().setSelection(selection); 
      break; 
     } 
    } 

請指導我改正代碼!我應該有一個像上面提到的那樣的路徑作爲輸入。

+0

首先找出什麼是'null'。爲此,登錄/打印:'PlatformUI.getWorkbench()','PlatformUI.getWorkbench()。getActiveWorkbenchWindow()','PlatformUI.getWorkbench()。getActiveWorkbenchWindow()。getActivePage()' – MrSmith42

+0

這裏代碼正在執行?在任何對話框裏面? – CuriousMind

+0

這部分只是爲了突出顯示eclipse package explorer中的類或文件。首先我搜索文件,因此我有文件路徑,然後我想使用我擁有的路徑突出顯示它! –

回答

2

考慮:

public static IWorkbench getWorkbench() { 
    if (Workbench.getInstance() == null) { 
     // app forgot to call createAndRunWorkbench beforehand 
     throw new IllegalStateException(WorkbenchMessages.PlatformUI_NoWorkbench); 
    } 
    return Workbench.getInstance(); 
} 

這可能是可能的,在調用喲時沒有調用createAndRunWorkbench()你的插件(如this tutorial所示)。

+0

Tnx,我認爲這是null,因爲我的代碼段不在'Execute'方法中! –

+0

@ orclUser很好,至少有一些進展。 – VonC

相關問題