2012-01-09 38 views
2

我有CompareEditor中显示的CompareEditorInput,它比较文本数据。在CompareEditor之外更改时,我需要重新加载CompareEditorInput。重载比较编辑器输入

  1. 打开比较编辑器(CompareUI.openCompareEditor(输入))
  2. 比较输入被改变(ISteramContentAccessor.getContents()返回更改的内容)
  3. 泰尔打开比较编辑器来加载CompareEditorInput < - 需要实现。
+0

如果您在编辑器部分调用'setInput(sameInput)',会发生什么? – 2012-01-09 09:50:17

+0

@MarttiKäärik,我怎么找到这个比较编辑器?我用'CompareUI.openCompareEditor(input);'打开它,并且我没有它的实例。 – 2012-01-09 09:52:47

+0

使用['IWorkbenchPage'](http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/IWorkbenchPage.html)'.findEditor( IEditorInput输入)'。 – 2012-01-09 10:01:02

回答

3

你可以称之为setInput(sameInput)CompareEditor,但由于CompareEditor是内部和EditorPart然后一个解决方法是调用IEditorPart.init(IEditorSite site, IEditorInput input)setInput()是不公开的。

IWorkbenchWindow wnd = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
IEditorPart editor = wnd.getActivePage().findEditor(input); 
editor.init((IEditorSite) editor.getSite(), input); 
+0

你是这个人..已经失败了3个星期,试图自己做这件事。我正要修改EditorPart实现,使setInput公开并重新调用它。 – 2017-12-13 14:13:55

-1

新的java io软件包java.nio.file包提供了文件更改通知API,称为Watch Service API。使用此功能,您可以监视磁盘上的文件并跟踪任何更改。请进一步查看reference

创建一个单独的线程,该线程使用WatchService API并在后台监视文件,并且如果在磁盘上发现任何更改,则通知用户。

+0

不幸的是,这是不对的。其实文件没有改变。从文件内容加载更改,文件不是。 – 2012-01-09 09:31:56

+0

你的意思是说你的比较编辑器之外的文件内容已经改变了吗? – 2012-01-09 09:36:30

+0

如果我使用比较编辑器和文本板打开相同的文件,并且如果我使用textpad进行了任何更改并保存了更改,那么比较编辑器应该能够跟踪该文件内容已被更改?我是否正确? – 2012-01-09 09:38:15