Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 更改CommandStack时保存_Java_Eclipse Rcp_Eclipse Gef - Fatal编程技术网

Java 更改CommandStack时保存

Java 更改CommandStack时保存,java,eclipse-rcp,eclipse-gef,Java,Eclipse Rcp,Eclipse Gef,这可能是一个非常简单的新手问题,但我已经有两天没法回答了,所以我会在这里回答。我的范围:我有一个带有一些图形编辑器(EditorPart的扩展)的RCP应用程序。在我的编辑器中,我希望捕获任何更改并直接保存它们。为此,我抓住了我的CommandStack被更改的时刻,并启动了一个doSave方法。问题是我的save方法调用了一个CommadStack change事件,如果我跳过这个调用,我的更改就会被保存,但是我的编辑器仍然有一个脏标志。我希望的行为是脏旗消失(就像正常的保存行为一样)。 下面

这可能是一个非常简单的新手问题,但我已经有两天没法回答了,所以我会在这里回答。我的范围:我有一个带有一些图形编辑器(EditorPart的扩展)的RCP应用程序。在我的编辑器中,我希望捕获任何更改并直接保存它们。为此,我抓住了我的CommandStack被更改的时刻,并启动了一个doSave方法。问题是我的save方法调用了一个CommadStack change事件,如果我跳过这个调用,我的更改就会被保存,但是我的编辑器仍然有一个脏标志。我希望的行为是脏旗消失(就像正常的保存行为一样)。
下面是我的CommandStack更改和doSave方法。你能帮帮我吗

@Override
public void commandStackChanged(EventObject event) {
    firePropertyChange(IEditorPart.PROP_DIRTY);
    doSave(null);
    setDirty(false);
}


public void doSave(final IProgressMonitor progressMonitor) {

        editorSaving = true;
        SafeRunner.run(new SafeRunnable() {

            public void run() throws Exception {
                IFile targetFile = getFile();

                List<GraphicalEditPart> editParts = DiagramUtil.getAllEditParts(NetEditor.this);
                Rectangle offsetBounds = DiagramUtil.getBounds(editParts);

                saveDiagramProperties();
                List<INetTransition> transitionsToExpand = saveSubdiagramGroups();
                FileUtil.saveDiagram(getNetDiagram(), targetFile,
                        NetEditor.this);
                getCommandStack().markSaveLocation();


                for (INetTransition trans : transitionsToExpand) {
                    trans.setExpanded(true);
                }
            }
        });
        setDirty(false);
        editorSaving = false;
    }
@覆盖
public void commandStackChanged(EventObject事件){
防火性能变化(部件部件变脏);
doSave(空);
setDirty(假);
}
public void doSave(最终IProgressMonitor进程监视器){
编辑保存=真;
SafeRunner.run(新的SafeRunnable(){
public void run()引发异常{
IFile targetFile=getFile();
List editParts=DiagramUtil.getAllEditParts(NetEditor.this);
矩形偏移边界=DiagramUtil.getBounds(editParts);
savediagramproperty();
List transitionsToExpand=saveSubdiagramGroups();
FileUtil.saveDiagram(getNetDiagram(),targetFile,
NetEditor.this);
getCommandStack().markSaveLocation();
for(inetransition trans:transitionsToExpand){
trans.setExpanded(真);
}
}
});
setDirty(假);
编辑保存=假;
}
使用getCommandStack().markSaveLocation()我再次调用commandStackChanged并进入循环。我怎样才能解决这个问题?没有它,我的编辑器在保存后仍然是脏的

感谢并问候,
Jeff

将IPropertyListener添加到编辑器中,然后收听IEditorPart.PROP\u DIRTY。对于侦听器实现,如果编辑器脏,则执行保存,否则不执行任何操作