【问题标题】:How do I stop an Eclipse Editor from closing in an RCP如何阻止 Eclipse 编辑器在 RCP 中关闭
【发布时间】:2011-01-10 13:13:09
【问题描述】:

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

期望的行为是:

  1. 用户单击编辑器窗口中的 X 或“CTRL+W”
  2. 会弹出一个对话框:“如果您关闭此编辑器,您的活动将停止。您想要吗?”
  3. 如果他们点击是,它会关闭,如果不是,它会保持打开状态。

哦,是的,这甚至可能吗?

谢谢, gk

【问题讨论】:

    标签: eclipse eclipse-rcp


    【解决方案1】:

    您可以使用org.eclipse.ui.ISaveablePart2,更具体地说是方法promptToSaveOnClose()

    但是,正如this thread 中所说,

    只有在关闭时编辑器脏了才会显示。

    查看SaveableHelper.java source file 中的示例。

    另请参阅文章Prevent that a RCP Editor is closed,其中解释了此方法的工作原理:

    【讨论】:

    • 我想过“脏”的方法,但不希望用户显示脏标志。也许我可以有两个脏标志,一个仅用于确保它不会关闭,另一个用于实际脏。
    • @GreenKiwi:两个“脏”状态可以工作,但需要您进行一些专业化才能使用您自己的 ISaveablePart 实现。
    • 我认为我最终会找到另一种方法来做到这一点,而无需尝试保持编辑器打开。当一个人试图让一个框架做一些它通常不喜欢做的事情时,麻烦似乎总是在悄悄出现。谢谢。
    • @GreenKiwi:对,在 Eclipse 领域,作业独立于编辑器运行。在我看来,编辑器可以向您显示有关正在运行的作业的详细信息,提供设置和启动作业的方法等,这似乎是合理的。但编辑器“不是”工作;这项工作有它自己的生命,并且可以显示在诸如 Eclipse 的“进度”视图之类的视图中。 (如果编辑器“是”一份工作,询问如果有人右键单击编辑器选项卡并获得“新编辑器”会发生什么。)如果您的用户很难找到“进度”视图,请将其添加到默认值透视,让它在作业启动时显示,等等。
    【解决方案2】:

    你也可以在

    中取消保存
    @Override
    public void doSave(IProgressMonitor monitor) {
    

    通过调用

    monitor.setCanceled(true);
    

    EditorPart实现中

    【讨论】:

      【解决方案3】:

      没有直接关系,但我正在寻找一种方法来防止编辑器被关闭,并发现了这个小技巧,希望它可以提供帮助。

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

      【讨论】:

      • 这行不通,因为从技术上讲,它仍在处理旧编辑器......所以如果你在编辑器中处理任何东西,你会得到一个错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      相关资源
      最近更新 更多