Java 如何在Eclipse中侦听项目删除?

Java 如何在Eclipse中侦听项目删除?,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我有一个带有增量生成器的项目。考虑到项目具有某种性质,构建器会将所有资源及其更改的表示形式写入模型中。这个运行得很好。但是,如果从工作区中删除整个项目,则不会调用增量生成器。为其创建事件处理程序的最佳方法是什么 我知道我可以创建一个IResourceChangeListener,并将其附加到所有我喜欢的项目中。但是我必须从IDE开始我的插件,这相当混乱 那么,捕获“已删除项目”事件的最佳方法是什么呢?IResourceChangeListener就是这样做的。您不需要将其附加到项目,所有更改都会

我有一个带有增量生成器的项目。考虑到项目具有某种性质,构建器会将所有资源及其更改的表示形式写入模型中。这个运行得很好。但是,如果从工作区中删除整个项目,则不会调用增量生成器。为其创建事件处理程序的最佳方法是什么

我知道我可以创建一个
IResourceChangeListener
,并将其附加到所有我喜欢的项目中。但是我必须从IDE开始我的插件,这相当混乱


那么,捕获“已删除项目”事件的最佳方法是什么呢?

IResourceChangeListener
就是这样做的。您不需要将其附加到项目,所有更改都会调用它


您可以使用
org.eclipse.ui.startup
扩展点在eclipse启动期间启动插件。

您可以使用IResourceChangeListener接收有关工作区中更改的通知。IResourceChangelistener API非常通用,可以为您提供有关许多不同类型更改的更改信息。下面是一个示例,说明如何专门使用它来检测项目删除

public class ProjectDeletionListenerManager implements IResourceChangeListener {

    public interface ProjectDeletionListener {
        void projectAboutToBeDeleted(IProject project);
    }

    private IWorkspace workspace;
    private ProjectDeletionListener listener;

    public ProjectDeletionListenerManager(ProjectDeletionListener listener) {
        this.workspace = ResourcesPlugin.getWorkspace();
        this.listener = listener;
        this.workspace.addResourceChangeListener(this, 
                IResourceChangeEvent.PRE_DELETE);
    }

    @Override
    public void resourceChanged(IResourceChangeEvent event) {
        IResource rsrc = event.getResource();
        if (rsrc instanceof IProject) {
            listener.projectAboutToBeDeleted((IProject) rsrc);
        }
    }

    public void dispose() {
        if (listener!=null) {
            workspace.removeResourceChangeListener(this);
            listener = null;
        }
    }

}

注意:代码片段基于。

但这不是不可取的吗?它会在启动时加载我的整个项目。我希望有一个更漂亮的解决方案。我知道IResourceChangeListener将是使用的工具。事实上,我是来寻找更准确的答案的。IResourceChangeListener是一种用途非常广泛的瑞士军刀。我总是要仔细查找/弄清楚如何根据我感兴趣的变化事件进行调整。因此,让我为这个答案提供一个代码片段:-)@Kris编辑这样的答案是不合适的,尽管机器人评论员批准了它。如果您想展示示例代码,请添加您自己的答案。实际上我本来打算这么做的,但后来我认为最好尝试改进现有的公认答案。但当然,如果你对“拥有”你的答案有强烈的感觉,我不会修改或试图改进它。