如何阻止Eclipse编辑器在RCP中关闭

如何阻止Eclipse编辑器在RCP中关闭,eclipse,eclipse-rcp,Eclipse,Eclipse Rcp,我正在开发一个基于Eclipse的RCP。我们需要防止用户关闭其中一个打开的编辑器 期望的行为是: 用户单击编辑器窗口中的X或“CTRL+W” 弹出一个对话框:“如果关闭此编辑器,您的活动将停止。是否要?” 如果他们单击“是”,它将关闭;如果单击“否”,它将保持打开状态 哦,是的,这可能吗 谢谢, gk您可以使用,更具体地说是方法promptosaveonclose() 但是,如中所说, 仅当编辑器在关闭时变脏时才会显示 请参见本文中的示例 另请参阅本文,其中解释了此方法的工作原理: 您也可以取

我正在开发一个基于Eclipse的RCP。我们需要防止用户关闭其中一个打开的编辑器

期望的行为是:

  • 用户单击编辑器窗口中的X或“CTRL+W”
  • 弹出一个对话框:“如果关闭此编辑器,您的活动将停止。是否要?”
  • 如果他们单击“是”,它将关闭;如果单击“否”,它将保持打开状态
  • 哦,是的,这可能吗

    谢谢, gk

    您可以使用,更具体地说是方法
    promptosaveonclose()

    但是,如中所说,

    仅当编辑器在关闭时变脏时才会显示

    请参见本文中的示例

    另请参阅本文,其中解释了此方法的工作原理:


    您也可以取消在中的保存

    @Override
    public void doSave(IProgressMonitor monitor) {
    
    打电话

    monitor.setCanceled(true);
    

    在EditorPart实现中

    与此没有直接关系,但我正在寻找一种方法来防止编辑器关闭,并发现了这个小漏洞,希望它能有所帮助

    page.addPartListener(new IPartListener2() {
        // [...]
        @Override
        public void partClosed(IWorkbenchPartReference partRef) {
            try {
                page.openEditor(input, id);
            } catch (PartInitException e) {
                e.printStackTrace();
            }
        }
    });
    

    我考虑过“脏”方法,但不希望用户显示脏标志。也许我可以有两个脏旗,一个只用于确保它不会关闭,另一个用于实际的脏。@GreenKiwi:两个“脏”状态可以工作,但是,为了使用自己的ISaveablePart实现,需要对您的部分进行一些专门化。我想我最终会找到另一种方法来实现这一点,而不是试图保持编辑器的打开状态。当一个人试图让一个框架去做它通常不喜欢做的事情时,麻烦似乎总是悄悄地出现。谢谢。@GreenKiwi:对,在eclipseland中,工作是独立于编辑的。在我看来,编辑可以向您展示正在运行的作业的详细信息、提供设置和启动作业的方法等,这似乎是合理的,但编辑“不是”作业;作业有自己的生命周期,可以在Eclipse的“进度”视图中显示。(如果某个编辑器“是”一个作业,请询问如果有人右键单击“编辑器”选项卡并获得“新编辑器”,会发生什么情况。)如果用户很难找到“进度”视图,请将其添加到默认透视图中,并在作业启动时显示,等等。这将不起作用,因为从技术上讲,它仍然在处理旧的编辑器……因此,如果您正在处理编辑器中的任何内容,就会出现错误。