2009-01-18 83 views
7

我正在开发用于eclipse的编辑器插件。它可以在eclipse项目中的文件上正常工作,但是当通过“文件 - >打开文件”菜单打开外部文件时(该文件与Java文件一起工作),我得到的页面只显示一条水平的蓝线,字“错误”。 eclipse的错误日志是空的,就像.metadata目录中的日志文件一样。Eclipse编辑器插件:在项目之外打开文件时出现“ERROR”

这是什么原因造成的?当我没有错误消息告诉我在哪里查看时,如何诊断错误?似乎没有办法从eclipse获得更详细的日志记录。

编辑:

我发现了问题的根源是接近jamesh提到的东西,而不是一个ClassCastException - 目前根本没有IDocument实例文本查看器中显示,因为StorageDocumentProvider.createDocument()返回空。这样做的原因是,它只知道如何创造的org.eclipse.ui.IStorageEditorInput实例文档,但在这种情况下,它得到的org.eclipse.ui.ide.FileStoreEditorInput一个实例,在没有实现该接口,而是实现org.eclipse.ui.IURIEditorInput

+0

我有奖项;)? – jamesh 2009-02-03 17:10:06

回答

8

我有同样的问题,并最终找到解决方案为我工作。 您必须提供2个不同的文档提供程序 - 第一个将文件文档提供程序用于工作台内的文件,第二个将文本文件提供程序扩展为工作区外的其他资源。然后您注册合适的供应商acording在你编辑doSetInput方法是这样的输入:

private IDocumentProvider createDocumentProvider(IEditorInput input) { 
    if(input instanceof IFileEditorInput){ 
     return new XMLTextDocumentProvider(); 
    } else if(input instanceof IStorageEditorInput){ 
     return new XMLFileDocumentProvider(); 
    } else { 
     return new XMLTextDocumentProvider(); 
    } 
} 

@Override 
protected final void doSetInput(IEditorInput input) throws CoreException { 
    setDocumentProvider(createDocumentProvider(input)); 
    super.doSetInput(input); 
} 

然后在您的新文件提供者(扩展类TextFileDocumentProvider)插入somethnig这样的:

protected FileInfo createFileInfo(Object element) throws CoreException { 
     FileInfo info = super.createFileInfo(element); 
     if(info==null){ 
      info = createEmptyFileInfo(); 
     } 
     IDocument document = info.fTextFileBuffer.getDocument(); 
     if (document != null) { 

      /* register your partitioner and other things here 
         same way as in your fisrt document provider */ 
     } 
     return info; 
    } 

这为我工作:)最后,我不得不提到,我不是那么聪明,我从项目Amateras复制这个解决方案(开源HTML编辑器插件为日食)

+1

感谢您的!编辑器插件示例(Eclipse 3.7)无法与非工作区文件一起使用,令我非常沮丧。仅供参考,3.7中,此代码中的类型检查不起作用。它的工作原理如果你改为:`instanceof IFileEditorInput` => XMLFileDocumentProvider,`else` => XMLTextDocumentProvider。此外,它也适用于在这两种情况下只使用XMLTextDocumentProvider(即TextFileDocumentProvider)的情况。更多信息[在这个论坛发帖](http://www.eclipsezone.com/eclipse/forums/t98253.html#92158543)。我不确定扩展FileDocumentProvider的理由。 – tcovo 2011-10-09 03:35:12

0

你尝试创建一个Java使用编辑器的文件,在工作区之外?

当使用文件路径调用编辑器时,在文件path.eg开头的concat“file://”:如果路径是C://temp//Sample.java,则将其修改为文件:// C://temp//Sample.java。

+0

我根本不会调用编辑器,我正在通过eclipse的菜单打开一个文件。这是一种特定的文件类型,其扩展名使其在我的编辑器插件中打开。我只是提到Java作为编辑器的一个例子。 – 2009-01-18 18:09:33

2

我有点从此刻的源代码了,但我怀疑问题是ClassCastException

  • 对于一个工作区文件,该IEditorInputorg.eclipse.ui.IFileEditorInput
  • 对于本地非工作区文件,该IEditorInputorg.eclipse.ui.IStorageEditorInput

的区别在于你如何得到从IEditorInput内容。 JDT执行明确的instanceof检查来制作交换机。

我不认为getAdapter(Class clazz)将返回java.io.InputStream,如果你提供它。

我不太明白他们为什么这样做,但感觉很难看。

编辑:有关调试日食应用 一个更普遍的观点 - 它真的尝试和你的日志组装成一个地方(即控制台)是非常有用的。

为此,请确保您使用命令行选项-console-consoleLog。后者帮助节省了无数个小时的时间。如果你还没有学习关于如何使用控制台的最基本的东西(ssstart是我最常用的)。这将节省更多的时间来诊断某类问题。

+0

这绝对听起来像它可能是原因 - 将检查,当我可以(我现在远离代码以及:) – 2009-01-20 09:12:35

相关问题