0

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

+---- src
+----- package
+------ Compile.java
+
+
+---- temp
+----- anotherpackage
+------ Temp.java (file to compile)

这是我得到 NullPointerException 的代码(我已经尝试在 Eclipse 中使用 JDK 作为我的标准 VM)。

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

我究竟做错了什么?

编辑:

我的 PATH 中没有 JDK(我无法添加它)

这是我的堆栈跟踪:

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

1 回答 1

0
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

导致问题。将您的 JRE 指向 JDK 内部,因为与 jdk 不同,jre 不提供任何工具。

于 2011-10-21T07:07:28.777 回答