【问题标题】:close Eclipse editor if file is open twice如果文件打开两次,则关闭 Eclipse 编辑器
【发布时间】:2015-05-15 21:06:17
【问题描述】:

我在这里为 Eclipse 创建自己的编辑器,但发现了一个问题。 如果我打开一个文件并且它已经打开,Eclipse 会打开一个新的编辑器。

所以,我需要避免这种情况,或者在打开编辑器后立即关闭它。

我的编辑器类是 MultiPageEditorPart 的子类,它有 2 个选项卡:第一个是 Java 编辑器,第二个是文本编辑器。 Java 编辑器打开一个 .java 文件,文本编辑器打开我自己的文件。 我看到一些帖子说如何解决这个问题,但我没有在这里实现 IEditorInput 接口。

谁能帮我解决这个问题? 非常感谢

这是我的编辑器定义:

    <extension point="org.eclipse.ui.editors">
    <editor id="br.com.senior.wb.asas.editor.AsasEditor"
        class="br.com.senior.wb.asas.editor.AsasEditor"
        contributorClass="br.com.senior.wb.asas.editor.AsasEditorContributor"
        extensions="java, afm"
        icon="icons/editor_asas.png" name="Editor ASAS">
    </editor>
</extension>

【问题讨论】:

  • 不是很清楚你在做什么。你打开的是什么类型的文件?打开哪个编辑器?您要打开哪个编辑器?
  • 嗨。它是一种文本文件。第二个编辑器只是一个 TextEditor。如果我尝试打开 .java 两次,它工作正常。但是如果我打开另一个文件两次,它会不断创建新的编辑器。
  • 向我们展示您如何使用 org.eclipse.ui.editors 扩展点定义您的编辑器(编辑问题以添加此内容)。

标签: eclipse plugins duplicates editor


【解决方案1】:

如果您的意思是当 java 或 afm 文件已打开而另一个文件已打开时打开一个编辑器,那么您需要使用编辑器定义的 matchingStrategy 属性来定义编辑器匹配策略。

类似:

 <extension point="org.eclipse.ui.editors">
    <editor id="br.com.senior.wb.asas.editor.AsasEditor"
        class="br.com.senior.wb.asas.editor.AsasEditor"
        contributorClass="br.com.senior.wb.asas.editor.AsasEditorContributor"
        matchingStrategy="br.com.senior.wb.asas.editor.AsasEditorMatchingStrategy"
        extensions="java, afm"
        icon="icons/editor_asas.png" name="Editor ASAS">
    </editor>
</extension>
public class AsasEditorMatchingStrategy implements IEditorMatchingStrategy
{ 
  public boolean matches(IEditorReference editorRef, IEditorInput input)
  {
    if (!(input instanceof IFileEditorInput))
      return false;

    IFile inputFile = (IFile)input.getAdapter(IFile.class);
    if (inputFile == null)
      return false;

    IFile currInputFile = (IFile)editorRef.getEditorInput().getAdapter(IFile.class);
    if (currInputFile == null)
      return false;

    if (!inputFile.getProject().equals(currInputFile.getProject()))
      return false;

    // TODO add more checks that 'inputFile' and 'currInputFile' are a matching pair of files
  }

【讨论】:

  • 目前还不清楚你在做什么。我只是在猜测这个。做一些调试。是否调用了匹配策略?
  • 是的。策略在我创建后现在被调用。
  • 好吧,然后一步一步来看看发生了什么
  • 这里的问题是我需要在我的 MultiPartEditor 中打开 2 个文件。在我的 init 方法中,我总是使用 Java 文件的 IEditorInput 调用 super()。但是,如果我根据打开的文件使用 EditorInput,我的编辑器会在每个选项卡中打开错误的文件。
  • 再次嗨,我在这里发布了有关我的编辑器的更多信息,但它被删除了,不知道为什么。也许我可以通过电子邮件向您发送更多详细信息并提供帮助?非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多