使用JavaCompiler时出现Nullpointerexception错误

时间:2013-08-08 13:49:58

标签: java nullpointerexception

以下是用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);

我得到的错误是:

  

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

您能否告诉我如何解决此错误?

5 个答案:

答案 0 :(得分:4)

来自ToolProvider.getSystemJavaCompiler()

  

返回:

     如果没有提供编译器,

此平台提供的编译器null

答案 1 :(得分:2)

当您使用JRE而不是JDK运行程序时,通常会出现这种情况。

像Eclipse一样的IDE检测JRE路径并将其设置为Java程序的运行路径。如果您正在使用Eclipse,那么在Build Path中设置具有JDK路径的新VM(默认路径使用JRE路径)

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

答案 2 :(得分:0)

此行JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

可能是您的编译器引用为空

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

答案 3 :(得分:0)

您的compiler为空,也就像设计ocd评论一样:不要在main方法中执行所有操作。利用methodsclasses

答案 4 :(得分:0)

您最有可能使用JRE而不是JDK运行程序。如果您使用ToolProvider运行编译器,JDK将只能提供编译器。

This is the expected behavior