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);

我得到的错误是:

compile.Execute.main(Execute.java:17) 处的线程“main”java.lang.NullPointerException 中的异常

你能告诉我如何解决这个错误吗?

4

5 回答 5

4

来自ToolProvider.getSystemJavaCompiler()

回报:

此平台提供的编译器,或者null如果没有提供编译器

于 2013-08-08T13:53:23.903 回答
2

这通常在您使用 JRE 而不是 JDK 运行程序时出现。

像 Eclipse 这样的 IDE 会检测 JRE 路径并将其设置为 Java 程序的运行路径。如果您使用的是 Eclipse,则在 Build Path 中使用 JDK 路径设置新 VM(默认使用 JRE 路径)

如果您直接从命令提示符运行,请检查您的类路径。

于 2014-12-26T14:16:23.170 回答
0

您很可能正在使用JREnot运行您的程序JDKToolProvider仅当您使用JDK.

这是预期的行为

于 2013-08-08T13:56:26.077 回答
0

compiler是空的,也只是作为一个设计 ocd 评论:不要在你的main方法中做所有这些工作。利用methodsclasses

于 2013-08-08T13:53:35.467 回答
0

可能您的编译器引用在此行为空 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

尝试在 PATH 的开头设置 %JAVA_HOME%\bin

于 2013-08-08T13:51:32.677 回答