NULLポインタ例外JavaコンパイラAPIを使用しながら、
-
23-09-2019 - |
質問
MyClass.javaます:
package test;
public class MyClass {
public void myMethod(){
System.out.println("My Method Called");
}
}
MyClass.javaファイルをコンパイルSimpleCompileTest.javaためにリストます。
SimpleCompileTest.javaます:
package test;
import javax.tools.*;
public class SimpleCompileTest {
public static void main(String[] args) {
String fileToCompile = "test" + java.io.File.separator +"MyClass.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
}
}
}
私はSimpleCompileTestクラスを実行すると、NullPointerExceptionが取得しています。 ToolProvider.getSystemJavaCompiler()はnullを返しています。誰かがコード
と間違っているものを私に教えてもらえます解決
私はあなたがにこの問題を実行している疑いがある - ランニングJREの代わりにJDKとコード
あなたはSimpleCompileTest
を実行すると、してみてください。の明示のあなたのJDKディレクトリ内の1つとして使用しているのjava.exeのバージョンを指定します。
他のヒント
私は同じエラーを得ました。たぶん私はこの質問に答えるためには遅すぎるが、私は私自身の経験を共有し、それが将来的には同じ問題に直面して他の誰かを助けるかもしれません。私はコンパイル時にソースコードで遊んでましたJavaファイルでランタイムのます。
それは言及されているように、私はjava.lang.NullPointerException
を得ていました。私はSystem.out.println(System.getProperty("java.home"));
とJavaホームディレクトリをプリントアウトし、私のEclipseは、私はJDK1.7の代わりに、JRE1.7を使用するように私の好みを変更した後も「C:\Program Files\Java\jre7
」を指して気づきました。
私はこのようなシステムプロパティを設定することで、JDK1.7の使用を強制することで回避策を見つけます:
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
それから私は私のプログラムをコンパイルし、任意のNullPointerException
を取得できませんでした。
おそらくあなたは、JREを持っている代わりに、JDKがインストールされています。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6477844 の
私は同じ問題を抱えていた。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
はnullを返していました。でも使用した後、
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_31");
はnullを返していました。
あなたはJDKを使用している場合は、しかし、このコードはTools.jar
にあるような問題は簡単だったJava\jdk1.8.0_31\lib
で見つかりました。私がやったことは、他のJREやプロジェクトの先頭にproject-->properties-->Java Build Path-->order and export-->
と移動tool.jar
に行くことにしました。
これは私が...コンパイルwell.Happyとしてnull希望のあなたにこのヘルプを取り除く助けた: - )
そのはexpicitily tools.jarを含めることにより、Javaアプリケーションでの作業が、Webアプリケーションのために働いていません。投げにNullPointer
補足:上記の答えは、プログラム内java.homeシステムプロパティを設定することです。あまりにも私のために動作することができますが、1つのJDKのバージョンのハードコードされてきたので、それは、非常に一般的な解決策ではありません。私が今使っているという選択肢は私がプログラムを実行すると、コマンドラインの「Java」へのフルパスを与えることです。等(上記の実施例と一致):
C:\\Program Files\Java\jdk1.7.0_02\jre\bin\java -cp ..\classes path.to.program.myProgram
プログラムを実行しているバージョンのJDKバージョン手段への完全なパスを与えるので)ToolProvider.getSystemJavaCompiler(とフェッチされる一つだ。