2014-02-27 72 views
0

我有eclipse rcp應用程序,在某些scenerio編輯器與ctabfolder我有編輯器實例進一步ctabfolder頁面顯示文件內容。我的問題是,如果我在第一個編輯器中打開相同的文件,並且在文件中做出的更改,我在應用程序中打開了另一個編輯器,現在它顯示的是之前打開的文件而不是更新的文件,而我爲所有打開另一個ediotr的過程創建了可用的更改文件。更新兩個編輯器實例顯示相同的文件

我用這個創建編輯器輸入,我認爲這是罪魁禍首,因爲它是在單例模式並返回已調用的ctab頁面實例。

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

如果是,那麼告訴我適當的替代。

回答

0

要讓編輯器知道它正在編輯的文件已被其他編輯器更改,您需要使用IResourceChangeListener使編輯器跟蹤資源更改。喜歡的東西此設置:

IResourceChangeListener resourceChange = new ResourceChange(); 

ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChange, IResourceChangeEvent.POST_CHANGE); 

的類將是:

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 
     } 
    } 
    } 
} 

editFileIFile編輯正在與。

您需要小心如何處理更改,因爲這將在編輯器的保存操作期間調用。

+0

@ greg_449它不在我的情況下工作 – RTA

+0

什麼是不工作?你有資源變更事件嗎?注意:只有在將文件保存在其中一個編輯器中時纔會發生該事件。 –

+0

@ greg_449其實我們已經用ctabFolder實現了一個編輯器,並在其中顯示報告是不可編輯的我正在尋找事件,因爲eclipse編輯器反映的意思是,當它應該反映在ctabfolder中時,它也應該反映在ctabfolder中,我知道它必須由reourcechangelistener完成但在我的情況下如何知道嘗試了很多方法。 – RTA

相關問題