首页 > 解决方案 > 编辑器关闭后如何删除 IMarkers(或者为什么 IMarker.TRANSIENT 属性不起作用)?

问题描述

我正在 Eclipse 中编写一个自定义编辑器,并且只是集成了自定义错误识别。现在我面临一个奇怪的问题:我可以将标记添加到我的编辑器中,并且可以很好地显示,我也可以在编辑器运行时删除它们。

什么不起作用:当我关闭我的编辑器时,我希望标记消失/被删除。

我现在正在做的是

我的deleteMarkers方法:

private void deleteMarkers() {
        IAnnotationModel anmod = getSourceViewer().getAnnotationModel();
        Iterator<Annotation> it = anmod.getAnnotationIterator();

        while (it.hasNext()) {
            SimpleMarkerAnnotation a = (SimpleMarkerAnnotation) it.next();
            anmod.removeAnnotation(a);

            try {
                a.getMarker().delete();
            } catch (CoreException e) {
                e.printStackTrace();
            }

        }
    }

任何帮助表示赞赏^^

标签: javaeclipseeclipse-plugin

解决方案


挂钩到您的编辑器关闭事件,获取对编辑器的 IResource 的引用(我相信您可以在 IEditorInput 上获得)并在相关资源上调用 IResource#deleteMarkers(),这将在您关闭编辑器时删除它们。按照设计,当编辑器关闭时,eclipse 不会删除标记。

这里有一些参考: http ://help.eclipse.org/kepler/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResource.html#deleteMarkers(java.lang .字符串,布尔值,整数)


推荐阅读