Eclipse plugin 在Eclipse插件中获取项目而无需打开编辑器

Eclipse plugin 在Eclipse插件中获取项目而无需打开编辑器,eclipse-plugin,eclipse-rcp,Eclipse Plugin,Eclipse Rcp,在Eclipse插件中,很容易获取当前项目(IProject),如果打开了编辑器,您只需要使用以下代码段: IEditorPart editor=PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); IFileEditorInput输入=(IFileEditorInput)编辑器。getEditorInput(); IFile file=input.getFile(); IP

在Eclipse插件中,很容易获取当前项目(
IProject
),如果打开了编辑器,您只需要使用以下代码段:

IEditorPart editor=PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
IFileEditorInput输入=(IFileEditorInput)编辑器。getEditorInput();
IFile file=input.getFile();
IProject project=file.getProject();

但是,如果我没有在编辑器中打开任何类型的文件,是否有办法获取项目?即:假设您有一个插件,在右键单击项目时添加一个选项,如果您单击此选项,将启动一个对话框窗口,如何在此对话框中打印项目名称?

对于使用“命令”和“处理程序”的菜单项等,您可以在处理程序中使用类似以下内容的代码:

公共类CommandHandler扩展了AbstractHandler
{
@凌驾
公共对象执行(ExecutionEvent事件)引发ExecutionException
{
ISelection sel=HandlerUtil.getCurrentSelection(事件);
if(IStructuredSelection的选择实例)
{
所选对象=((IsStructuredSelection)sel.getFirstElement();
IResource resource=(IResource)Platform.getAdapterManager().getAdapter(选中,IResource.class);
if(资源!=null)
{
IProject project=resource.getProject();
...
}
}
返回null;
}
}
你所说的“当前项目”是什么意思?获取一个特定的项目总是需要某种方法来唯一地标识该特定的项目

如果当前项目是指项目已打开,那么这不是唯一性的好标准(在一般情况下),因为可以同时打开多个项目

唯一定义项目的保证是获得对该项目包含的资源的引用。例如,这可以通过编辑器输入(如您所述)或通过选择(如所示)来完成

如果你有项目的名称,那么你可以使用,但我想情况并非如此。不过,为了完整性:

ResourcesPlugin.getWorkspace().getRoot().getProject(“MyProject”);
您还可以获得所有项目的列表,并在该列表上迭代以检查您知道该项目具有(或项目具有)的属性。请参见下面的示例。当然,这也不能保证在一般情况下的唯一性,因为可以有多个项目满足标准。这就是我在示例中使用列表的原因

IProject[]projects=ResourcesPlugin.getWorkspace().getRoot().getProjects();
List openProjects=new ArrayList();
List myNatureProjects=newarraylist();
用于(i项目:项目)
{
if(project.isOpen())
openProjects.add(project);
if(project.hasNature(“MyNatureId”)
myNatureProjects.add(project);
}

对于特定情况,这是一个非常好的选择,我想我可以使用它,但我正在寻找一个更通用的解决方案,一个可以在任何地方使用的解决方案,而不必担心编辑器或扩展其他类。我不认为有通用的解决方案,只是针对个别情况有很多特定的解决方案。总之,我很害怕,您提供的代码片段工作正常