Eclipse plugin 使用IEditorreference关闭编辑器?(eclipse RCP)

Eclipse plugin 使用IEditorreference关闭编辑器?(eclipse RCP),eclipse-plugin,eclipse-rcp,Eclipse Plugin,Eclipse Rcp,我有一个UI,当我选择一个项目(在树中),然后按下“添加”按钮时,我会得到一个新的编辑器。每一项我都能得到一个编辑器。(但都有相同的ID) 我的目的是仅关闭item1的编辑器,例如,当我按下“save”时。 我可以通过以下方式关闭所有编辑器: getSite().getWorkbenchWindow().getActivePage().closeAllEditors(true) 但不仅仅是我需要关闭的那个 我认为,这个问题可以通过使用IEditor参考来解决,但不知道具体如何解决!:( 请帮忙:

我有一个UI,当我选择一个项目(在树中),然后按下“添加”按钮时,我会得到一个新的编辑器。每一项我都能得到一个编辑器。(但都有相同的ID) 我的目的是仅关闭item1的编辑器,例如,当我按下“save”时。 我可以通过以下方式关闭所有编辑器:
getSite().getWorkbenchWindow().getActivePage().closeAllEditors(true)

但不仅仅是我需要关闭的那个

我认为,这个问题可以通过使用IEditor参考来解决,但不知道具体如何解决!:( 请帮忙:)

List editors=new ArrayList();
对于(IWorkbenchWindow:PlatformUI.getWorkbench().getWorkbenchWindow()){
对于(IWorkbenchPage:window.getPages()){
对于(IEditorReference编辑器:page.getEditorReferences()){
editors.add(editor);
}
}
}
getSite().getWorkbenchWindow().getActivePage().closeEditor(editors.get(index)?,true);

打开编辑器时,您必须跟踪项目与相关打开的
IEditor引用之间的映射。例如,可以使用简单的
HashMap
对象来完成此操作。

可以使用编辑器输入跟踪编辑器。表示item1的对象必须是编辑器输入的一部分

比如:

//创建和打开
MyObject项目1=//创建项目1
//开放式编辑器
myInput=新的MyEditorInput(项目1)
openEditor(工作台页面、myInput、我的编辑器ID);
//结束
tmpInput=新的MyEditorInput(项目1)
IEditorReference[]editorReferences=PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage()
.getEditorReferences();
List relevantEditors=new ArrayList();
for(IEditorReference IEditorReference:editorReferences){
if(iEditorReference.getEditorInput().equals(tmpInput)){
添加(iEditorReference);
}
}
平台
.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage()
.特写编辑(
(IEditorReference[])相关编辑。toArray(新IEditorReference[相关编辑
.size()),true);

确保您已经覆盖了EditorInput的equals和hashCode,以检查包装的
MyObject
-实例的相等性。多亏了Tom,您的答案帮助很大

由于每个IEditorInput都可以设置其名称,因此我们还可以使用以下名称:

// String str =.....
// str, could be an editor's property

if (iEditorReference.getEditorInput().getName().equals(str))
此外,它将抛出如下异常:

//....................

    try {
        for (IEditorReference iEditorReference : editorReferences) {
            if (iEditorReference.getEditorInput().getName().equals(str)) {
                relevantEditors.add(iEditorReference);
            }
        }
    } catch (PartInitException e) {
        e.printStackTrace();
    }
//...................