8

私はEclipse用のエディタープラグインを開発しています。Eclipse プロジェクト内のファイルでは問題なく動作しますが、「ファイル -> ファイルを開く」メニュー (Java ファイルなどのファイルで動作する) を介して外部ファイルを開くと、青い水平線と「エラー」という言葉。.metadata ディレクトリのログ ファイルと同様に、Eclipse のエラー ログは空です。

何が原因でしょうか? どこを見ればよいかを示すエラー メッセージがない場合、どうすればエラーを診断できますか? Eclipse からより詳細なログを取得する方法はないようです。

編集:

問題の原因はjameshが言及したものに近いことがわかりましたが、ClassCastExceptionではありません-nullを返すIDocumentため、テキストビューアが表示するインスタンスがありませんStorageDocumentProvider.createDocument()。この理由は、 のインスタンスのドキュメントを作成する方法しか認識していないためですorg.eclipse.ui.IStorageEditorInputが、この場合は のインスタンスを取得しますorg.eclipse.ui.ide.FileStoreEditorInput。これはそのインターフェイスを実装していませんが、代わりに を実装しています。org.eclipse.ui.IURIEditorInput

4

3 に答える 3

8

私は同じ問題を抱えていて、最終的に解決策が私のために働いているのを見つけました。2つの異なるドキュメントプロバイダーを提供する必要があります。最初はワークベンチ内のファイル用にFileDocumentProviderを拡張し、2番目はワークスペース外の他のリソース用にTextFileDocumentProviderを拡張します。次に、次のように、エディターの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を拡張)に次のようなものを挿入します。

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(Eclipse用のオープンソースHTMLエディタープラグイン)からこのソリューションをコピーしたことを言及する必要があります

于 2009-03-25T13:12:09.033 に答える
2

ClassCastException問題は次のとおりだと思いますが、現時点ではソースコードから少し離れています。

  • ワークスペース ファイルの場合IEditorInputorg.eclipse.ui.IFileEditorInput.
  • ローカルの非ワークスペース ファイルの場合IEditorInputorg.eclipse.ui.IStorageEditorInput

違いは、 からコンテンツを取得する方法にありますIEditorInput。JDT は明示的なinstanceofチェックを行って切り替えを行います。

あなたがそれを提供した場合、getAdapter(Class clazz)は a を返さないと思います。java.io.InputStream

なぜこのようなことをするのかよくわかりませんが、醜く感じます。

編集: Eclipse アプリのデバッグに関するより一般的なポイント - すべてのログを 1 つの場所 (つまり、コンソール) に集めてみると非常に便利です。

これを行うには、必ずコマンド ライン オプション-consoleとを使用してください-consoleLog。後者は数え切れないほどの時間を節約するのに役立ちました. まだ行っていない場合は、コンソールの使用方法に関する最も基本的なことを学んでください (ssそしてstart、私が最も頻繁に使用するものです)。これにより、特定のクラスの問題を診断する時間を節約できます。

于 2009-01-20T08:56:29.193 に答える
0

ワークスペースの外で、エディターを使用してJAVAファイルを作成してみましたか?

ファイルパスを使用してエディターを呼び出す場合は、ファイルパスの先頭に「file://」を連結します。例:パスがC:// temp // Sample.javaの場合は、file://Cとして変更します。 ://temp//Sample.java。

于 2009-01-18T17:57:45.013 に答える