Java 删除资源后关闭Eclipse编辑器

Java 删除资源后关闭Eclipse编辑器,java,eclipse,rcp,Java,Eclipse,Rcp,我正在开发一个eclipse插件,并面临一个问题: 假设您打开了两个编辑器,右键单击“项目资源管理器”中的项目,然后将其删除。通知所有相关的打开编辑器以便将其关闭并从视图中删除的干净方法是什么?实际上,删除项目时,所有编辑器都保持打开状态,因此状态不一致 如果您有任何想法,我们将不胜感激:)以下是我针对Indigo的解决方案,MyEditor将侦听项目关闭事件,并在其文件属于要关闭的项目时自动关闭 public class MyEditor extends EditorPart { pr

我正在开发一个eclipse插件,并面临一个问题:

假设您打开了两个编辑器,右键单击“项目资源管理器”中的项目,然后将其删除。通知所有相关的打开编辑器以便将其关闭并从视图中删除的干净方法是什么?实际上,删除项目时,所有编辑器都保持打开状态,因此状态不一致


如果您有任何想法,我们将不胜感激:)

以下是我针对Indigo的解决方案,
MyEditor
将侦听项目关闭事件,并在其文件属于要关闭的项目时自动关闭

public class MyEditor extends EditorPart {
    private final Display display = Display.getCurrent();

    private IResourceChangeListener editorCloser = new IResourceChangeListener() {
        public void resourceChanged(IResourceChangeEvent event) {
            final IResource closingProject = event.getResource();
            Display.getDefault().asyncExec(new Runnable(){
                public void run() {
                    for (IWorkbenchPage page : getSite().getWorkbenchWindow().getPages()) {
                        FileEditorInput editorInput = (FileEditorInput) MyEditor.this.getEditorInput();
                        if (editorInput.getFile().getProject().equals(closingProject))
                            page.closeEditor(page.findEditor(editorInput), true);
                    }
                }
            });
        }   
    };

    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        [...]
        ResourcesPlugin.getWorkspace().addResourceChangeListener(editorCloser,
            IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE);
    }

    public void dispose() {
        super.dispose();
        ResourcesPlugin.getWorkspace().removeResourceChangeListener(editorCloser);
    }
}

让我困惑的是,Eclipse的默认行为不是在其项目关闭时关闭编辑器。

以下是我针对Indigo的解决方案,
MyEditor
侦听项目关闭事件,如果其文件属于正在关闭的项目,则会自动关闭

public class MyEditor extends EditorPart {
    private final Display display = Display.getCurrent();

    private IResourceChangeListener editorCloser = new IResourceChangeListener() {
        public void resourceChanged(IResourceChangeEvent event) {
            final IResource closingProject = event.getResource();
            Display.getDefault().asyncExec(new Runnable(){
                public void run() {
                    for (IWorkbenchPage page : getSite().getWorkbenchWindow().getPages()) {
                        FileEditorInput editorInput = (FileEditorInput) MyEditor.this.getEditorInput();
                        if (editorInput.getFile().getProject().equals(closingProject))
                            page.closeEditor(page.findEditor(editorInput), true);
                    }
                }
            });
        }   
    };

    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        [...]
        ResourcesPlugin.getWorkspace().addResourceChangeListener(editorCloser,
            IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE);
    }

    public void dispose() {
        super.dispose();
        ResourcesPlugin.getWorkspace().removeResourceChangeListener(editorCloser);
    }
}

让我困惑的是,Eclipse的默认行为不是在项目关闭时关闭编辑器。

事实上,我知道有一个IResourceChangeListener可以监听资源PRE\u close/PRE\u DELETE/POST\u CHANGE…等等。但我需要在编辑器端处理这个问题,所以一旦父项(项目)从工作区中删除,后者就应该关闭。谢谢,事实上我知道有一个IResourceChangeListener可以监听资源PRE\u CLOSE/PRE\u DELETE/POST\u CHANGE…等等。但我需要在编辑器端处理这个问题,所以一旦父项(项目)从工作区中删除,后者就应该关闭。感谢考虑使用<代码> GETSITE().GETPGEAGE()、CeleEdgEnter(这个,false)< />代码,而不是通过他们的代码> IdEdReRealEng/<代码>查找编辑器。考虑使用<代码> GETSITE().GETPGEAGE()。