11

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 を返しています。誰かがコードの何が問題なのか教えてもらえますか

4

6 に答える 6

18

同じエラーが発生しました。この質問に答えるには遅すぎるかもしれませんが、私は自分の経験を共有しています。将来同じ問題に直面する他の誰かを助けるかもしれません. Compile Java Files At Runtimeでソースコードをいじっていました。

私はjava.lang.NullPointerExceptionそれが言及されているようになっていました。JRE1.7の代わりに JDK1.7 を使用するように設定を変更した後でもSystem.out.println(System.getProperty("java.home"));、Eclipse が " " を指していることに気付きました。C:\Program Files\Java\jre7

次のようにシステム プロパティを設定して、JDK1.7 の使用を強制することで回避策を見つけました。

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");

次に、プログラムをコンパイルしましたが、何も得られませんでしNullPointerExceptionた。

于 2012-06-08T07:40:00.353 に答える
16

JDK の代わりに JRE を使用してコードを実行しているというこの問題が発生していると思われます。

を実行するときは、使用している java.exe のバージョンを JDK ディレクトリ内のものとして明示的にSimpleCompileTest指定してみてください。

于 2010-03-30T07:30:30.237 に答える
1

おそらく、JDK ではなく JRE がインストールされています。http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477844

于 2010-03-30T07:30:44.213 に答える
1

私は同じ問題を抱えていました

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これは、null を取り除くのに役立ちました。これがあなたにも役立つことを願っています。コンパイルをお楽しみください...:-)

于 2015-03-10T12:12:04.033 に答える
0

tools.jarを明示的に含めることでJavaアプリケーションと連携しますが、Webアプリケーションは機能しません。ヌルポインタを投げる

于 2012-02-29T10:30:42.040 に答える
0

補足: 上記の答えは、プログラム内で 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(); でフェッチされるバージョンです。

于 2014-08-22T15:20:50.283 に答える