我正在使用此代码在运行时编译Java文件。首先,这里是我的目录树(在Eclipse中)。Java编译器API空指针异常
+---- src
+----- package
+------ Compile.java
+
+
+---- temp
+----- anotherpackage
+------ Temp.java (file to compile)
这里是我的代码,我得到NullPointerException(我已经尝试使用JDK作为Eclipse中的标准虚拟机)。
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)
您应该包含堆栈跟踪。 –
编译器可能在您的系统中不可用。检查ToolProvider API,它会说如果没有提供编译器,getSystemJavaCompiler将返回null。 –
@HovercraftFullOfEels JDK不在我的PATH中,我不能添加它,但即使当我将JDK用作我的StandardVM时,它仍然不起作用。 – LanguagesNamedAfterCofee