1

以下はEclipse IDEで書かれたJavaコードです...

package compile;

import java.io.IOException;
import java.util.Arrays;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class Execute {
    public static void main(String args[]) throws IOException, ClassNotFoundException {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(
                diagnostics, null, null);
        Iterable<? extends JavaFileObject> compilationUnits = fileManager
                .getJavaFileObjectsFromStrings(Arrays
                        .asList("F:\\practice java\\project\\KeepingMoreKidsQuiet.java"));
        JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
                diagnostics, null, null, compilationUnits);
        boolean success = task.call();

        System.out.println(success);
        if(!success)
            System.out.println(diagnostics.getDiagnostics());
        fileManager.close();
    }
}

Java プログラムを実行すると、この行にエラーが表示されます

StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);

私が得ているエラーは次のとおりです。

スレッド「メイン」での例外 java.lang.NullPointerException at compile.Execute.main(Execute.java:17)

このエラーを解決する方法を教えてください。

4

5 に答える 5

2

これは通常、JDK ではなく JRE を使用してプログラムを実行している場合に発生します。

Eclipse のような IDE は JRE パスを検出し、それを Java プログラムの実行パスとして設定します。Eclipse を使用している場合は、Build Path 内で新しい VM に JDK パスを設定します (デフォルトでは JRE パスを使用します)。

コマンドプロンプトから直接実行する場合は、クラスパスを確認してください。

于 2014-12-26T14:16:23.170 に答える
0

おそらく、プログラムを ではJREなくで実行していますJDK。で実行したToolProvider場合にのみ、 はコンパイラを提供できますJDK

これは予想される動作です

于 2013-08-08T13:56:26.077 に答える
0

おそらくあなたのコンパイラ参照はこの行でnullです JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

PATH の先頭に %JAVA_HOME%\bin を設定してみてください

于 2013-08-08T13:51:32.677 に答える