2014-10-09 205 views
0

我正在使用ISelection來獲取選定的項目名稱。每次選擇項目時獲取選定的項目名稱

public static IProject getCurrentProject() {  
     IProject project = null;  
     ISelectionService selectionService = Workbench.getInstance().getActiveWorkbenchWindow().getSelectionService();  

     ISelection selection = selectionService.getSelection();  


     if(selection instanceof IStructuredSelection) {  
      Object element = ((IStructuredSelection)selection).getFirstElement();  

      if (element instanceof IResource) {  
       project= ((IResource)element).getProject();  

      } 
      else if (element instanceof IJavaElement) {  
       IJavaProject jProject= ((IJavaElement)element).getJavaProject();  
       project = jProject.getProject();  
      } 



     } 

     return project; 
    } 

問題是該函數僅在第一次執行時才返回項目名稱。

當我在按鈕事件上調用它時,我得到一個空指針異常,看起來這個元素爲空。

我必須改變以獲得所選的項目名稱,我每次調用此函數?

回答

2

Workbench內部類,你不能使用它Eclipse API Rules of Engagement。使用:

PlatformUI.getWorkbench() 

得到IWorkbench實例。

ISelectionService.getSelection返回當前活動部分中的選擇,所以如果您從編輯器或視圖中調用此選項,那麼在Package/Project Explorer中將不會選擇該選擇。

您可以撥打ISelectionService.getSelection("part id")以獲得特定部件的選擇 - 但您必須制定部件ID。

您可以使用ISelectionService.addPostSelectionListener來了解所有部件選擇的變化。

+0

我正在開發一個插件,這就是爲什麼我使用Workbench的原因,我嘗試在運行插件的位置獲取選定的項目名稱,我的函數返回選定的項目名稱,但僅在第一次執行時(當插件中的視圖加載)....我需要解決這個問題.... – 2014-10-09 08:05:50

+0

工作臺是不可接受的核心Eclipse代碼之外的任何地方。這是一個內部課程,可以在沒有通知的情況下更改。 – 2014-10-09 08:24:17

+0

可能您第一次運行代碼時,Package Explorer是活動部分,您將獲得選擇。在另一個運行中,其他運行是活動部分,它有一個空的選擇。每個部分都有自己獨立的選擇。 – 2014-10-09 08:31:02