Java编译器API NullPointerException

Java编译器API NullPointerException,java,compilation,java-compiler-api,Java,Compilation,Java Compiler Api,我正在使用这段代码在运行时编译一个Java文件。首先,这是我在Eclipse中的目录树 +---- src +----- package +------ Compile.java + + +---- temp +----- anotherpackage +------ Temp.java (file to compile) public static void compile(URI path, InputStream is, OutputStream os, OutputStream err

我正在使用这段代码在运行时编译一个Java文件。首先,这是我在Eclipse中的目录树

+---- src
+----- package
+------ Compile.java
+
+
+---- temp
+----- anotherpackage
+------ Temp.java (file to compile)
public static void compile(URI path, InputStream is, OutputStream os, OutputStream err) throws IOException {
    SimpleJavaFileObject source = new CustomJavaFileObject(path, Kind.SOURCE);
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    JavaCompiler.CompilationTask task = compiler.getTask(new PrintWriter(err), null, null, null, null, Arrays.asList(source));
    task.call();
}
这是我的代码,我从中得到了NullPointerException,我已经尝试在Eclipse中使用JDK作为标准VM

+---- src
+----- package
+------ Compile.java
+
+
+---- temp
+----- anotherpackage
+------ Temp.java (file to compile)
public static void compile(URI path, InputStream is, OutputStream os, OutputStream err) throws IOException {
    SimpleJavaFileObject source = new CustomJavaFileObject(path, Kind.SOURCE);
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    JavaCompiler.CompilationTask task = compiler.getTask(new PrintWriter(err), null, null, null, null, Arrays.asList(source));
    task.call();
}
以下是CustonJavaFileObject:

class CustomJavaFileObject extends SimpleJavaFileObject {
    protected CustomJavaFileObject(URI uri, Kind kind) {
        super(uri, kind);
    }
}
我做错了什么

编辑:

我的路径中没有JDK,无法添加它

这是我的堆栈跟踪:

java.lang.NullPointerException 
  at package.Compiler.compile(Compiler.java:20)
  at package.Interactive.main(Interactive.java:19)

导致了这个问题。将JRE指向JDK内部,因为与JDK不同,JRE不提供任何工具。

您应该包括堆栈跟踪。系统中可能没有可用的编译器。检查ToolProvider API,它会说如果没有提供编译器,getSystemJavaCompiler将返回null。@HovercraftFullOfEels JDK不在我的路径中,我无法添加它,但即使我使用JDK作为标准VM,它仍然不起作用。