1

記事の「書き留める」セクションを参照して ください http://www.eclipse.org/articles/article.php?file=Article-javaCodeManipulation_AST/index.html

cofoja を使用して記述されたコントラクトを持つメソッドを持つ Java ソース コード ファイルを解析しています。ここで、入力ファイルの抽象構文木 (ast) を作成し、それを変更します。Document ドキュメント、オブジェクトが変更されていることがわかります。しかし、このドキュメントを元のソース ファイルに反映させようとすると、次の宣言で例外がスローされます。

 // get the buffer manager  
 ITextFileBufferManager bufferManager = FileBuffers.getTextFileBufferManager(); 

ITextFileBufferManager bufferManagerMyVisitor.java での宣言に対して、次の例外がスローされます。

Exception in thread "main" java.lang.ExceptionInInitializerError
    at ASTModifier.main(ASTModifier.java:205)
Caused by: java.lang.IllegalStateException: Workspace is closed.
at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:340)
at org.eclipse.core.filebuffers.FileBuffers.<clinit>(FileBuffers.java:52)
... 1 more

このため、元の Java ファイルを変更できません。ネットで見つけたリンクの 1 つ : http://www.programcreek.com/2011/05/java-lang-illegalstateexception-workspace-is-closed/#comment-1939

簡単に言えば、これは、依存するjarファイルを通常のJavaプロジェクトに追加するだけで発生します。JDT を使用するには、プログラムを jar として使用するのではなく、プラグイン (または少なくとも OSGi 対応アプリケーション) として実行する必要があります。

私は単純なJavaプロジェクトを作成しているので、FileBuffersクラスを使用するのに問題はありますか? 代わりにプラグインを作成する必要がありますか?

4

1 に答える 1

0

簡単な答え: はい。開いているワークスペースで実行している場合 (つまり、Eclipse プラグインを作成した場合) にのみ、JDT API を使用できます。

Eclipse API を使用する単純なプログラムを作成する場合は、おそらく RCP アプリケーションを作成する必要があります。これにより、Eclipse プラグインの sib0set を使用していくつかの機能を作成できます。

RCP に関する優れたチュートリアルは次のとおりです。

http://www.vogella.de/articles/EclipseRCP/article.html

于 2011-08-07T22:41:10.123 に答える