【问题标题】:Update two editor instance showing same file更新两个显示相同文件的编辑器实例
【发布时间】:2014-02-27 05:46:14
【问题描述】:

我有 Eclipse rcp 应用程序,在某些场景中带有 ctabfolder 的编辑器我有编辑器实例进一步显示文件内容的 ctabfolder 页面。我的问题是,如果我在第一个编辑器中打开相同的文件并在文件中进行更改后,我在应用程序中打开了另一个编辑器,现在它显示以前打开的文件而不是更新的文件,而我已经为打开另一个 ediotr 的所有进程制作了可用的更改文件.

我正在使用它来创建编辑器输入,我认为这是罪魁祸首,因为它采用单例模式并返回已调用的 ctab 页面实例。

IFileStore fileStore = EFS.getLocalFileSystem().getStore("filepath");

如果是,请告诉我合适的替代品。

【问题讨论】:

    标签: java editor swt eclipse-rcp jface


    【解决方案1】:

    要让编辑器知道它正在编辑的文件已被另一个编辑器更改,您需要使用IResourceChangeListener 使编辑器跟踪资源更改。使用以下内容进行设置:

    IResourceChangeListener resourceChange = new ResourceChange();
    
    ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChange, IResourceChangeEvent.POST_CHANGE);
    

    ResourceChange 类将是:

    private class ResourceChange implements IResourceChangeListener
    {
      @Override
      public void resourceChanged(final IResourceChangeEvent event)
      {
        final IResourceDelta eventDelta = event.getDelta();
    
        final IResourceDelta trackDelta = eventDelta.findMember(editFile);
        if (trackDelta != null)
         {
           if ((trackDelta.getKind() & IResourceDelta.CHANGED) != 0 &&
               (trackDelta.getFlags() & IResourceDelta.CONTENT) != 0)
            {
               // TODO handle change
            }
         }
       }
    }
    

    editFile 是编辑器正在使用的IFile

    您需要注意如何处理更改,因为这将在编辑器的保存操作期间被调用。

    【讨论】:

    • 什么不起作用?您是否收到资源更改事件?注意:仅当您在其中一个编辑器中保存文件时才会发生该事件。
    • @greg_449 实际上我们已经使用 ctabFolder 实现了一个编辑器,并且在其中显示报告是不可编辑的它必须由 reourcechangelistener 完成,但在我的情况下,dnt 知道如何尝试了很多方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-01-04
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2019-08-27
    • 2014-12-14
    相关资源
    最近更新 更多