1

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

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

任何想法,将不胜感激 :)

4

1 回答 1

1

这是我对 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 的默认行为不是在项目关闭时关闭编辑器。

于 2013-09-17T10:46:07.133 回答