2009-01-18 79 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

相關問題