Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在编辑器关闭后删除IMarker(或者为什么IMarker.TRANSIENT属性不起作用)?_Java_Eclipse_Eclipse Plugin - Fatal编程技术网

Java 如何在编辑器关闭后删除IMarker(或者为什么IMarker.TRANSIENT属性不起作用)?

Java 如何在编辑器关闭后删除IMarker(或者为什么IMarker.TRANSIENT属性不起作用)?,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我正在Eclipse中编写一个自定义编辑器,并集成了自定义错误识别。现在我面临一个奇怪的问题:我可以在编辑器中添加标记,这些标记可以很好地显示出来,我还可以在编辑器运行时删除它们 什么不起作用:当我关闭编辑器时,我希望标记消失/被删除 我现在正在做的是 创建具有如下瞬态属性集的标记:marker.setAttribute(IMarker.transient,true)但这似乎没有改变任何事情 试图通过源查看器注释模型删除所有注释。这不起作用,因为当我尝试挂接到我的编辑器dispose()方法或

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

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

我现在正在做的是

  • 创建具有如下瞬态属性集的标记:
    marker.setAttribute(IMarker.transient,true)但这似乎没有改变任何事情

  • 试图通过源查看器注释模型删除所有注释。这不起作用,因为当我尝试挂接到我的编辑器
    dispose()
    方法或将
    DisposeListener
    添加到我的sourceviewers textwidget时,sourceviewer已经被释放并且
    getSourceViewer().getAnnotationModel()返回
    null

我的
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();
            }

        }
    }
private void deleteMarkers(){
IANotationModel anmod=getSourceViewer().getAnnotationModel();
迭代器it=anmod.getAnnotationIterator();
while(it.hasNext()){
SimpleMarkerAnnotation a=(SimpleMarkerAnnotation)it.next();
修改删除说明(a);
试一试{
a、 getMarker().delete();
}捕获(COREE){
e、 printStackTrace();
}
}
}

非常感谢您提供的任何帮助^ ^

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

以下是一些参考资料:

他们必须是图像标记者吗?如果它们仅在编辑器运行时存在,则可以使用非标记的批注。IMarker.TRANSIENT意味着标记不会跨会话保存,但并不意味着编辑器退出时它会被删除。哇,非常感谢!这是我100%想要的^^^甜蜜的,很高兴它有帮助,我知道试图弄明白一些日食的东西的挫折感。