2012-04-02 10 views
1

JavaCompilerは、jarファイルから呼び出されたときにnullポインタを返します。jarファイル内のJavaCompiler

コマンドラインからJavaCompilerでプログラムを実行すると、すべて正常に動作します。 JDKが私のOSに正しくインストールされています。

なぜ機能しないのですか?

コード:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); 
Iterable<String> options = Arrays.asList(new String[] { "-d", currentDir+"/cache/","-sourcepath",currentDir+"/srcss/"}); 
Iterable<? extends JavaFileObject> compUnits = fileManager.getJavaFileObjects(fRun); 
Boolean compRes = compiler.getTask(null, fileManager, null, options, null, compUnits).call(); 

答えて

2

あなたはjarファイルとしてアプリケーションを起動するときに、あなたが同じランタイムを使用していることを確認する必要があります。

スタンドアロンアプリケーションとして起動すると、基本的なJREのインストールではおそらくrt.jarが使用されますが、IDEから実行するときはJDKのrt.jarを使用する可能性が最も高いです。

これをデバッグするには、System.out.println(System.getProperty("java.home"));を実行します。

+0

場所で私達はJDKからそれを呼び出しているか、それが適切なjarファイルが含まれていることを確認しかし、私のしてください可能性があり、それはnullを返します(通常は、我々は唯一のJREの下で実行される)JREの下でそれを使用している場合システムがJDKに設定されている。コマンドラインからプログラムを起動すると、JDKから起動します。 jarをJDKに設定する方法は? – ctekk

+0

アプリケーションで 'System.getProperty(" java.home ")'によって返された文字列を出力し、それが異なるかどうかを確認します。 – aioobe

0

自分のマシンに展開する場合は、SDKのtools.jarをアプリケーションの実行時クラスパス(明示的にマニフェストに記述)に明示的に追加することで問題を解決できます。

代替戦略はSTBC configurationで見ることができます(または少なくとも示唆されています)。あなたはもっと情報が必要な場合。それらについては、私に知らせてください。

0

私の理解によれば、JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();そのBeignがJDKディストリビューションの下で実行された場合に限り、Javaコンパイラへのハンドルを返します。

あなたが

関連する問題