2014-10-09 124 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