问题
I am using this code to compile a Java file at runtime. First of all, here is my directory tree (in Eclipse).
+---- src
+----- package
+------ Compile.java
+
+
+---- temp
+----- anotherpackage
+------ Temp.java (file to compile)
Here is my code where I am getting the NullPointerException (I already tried using JDK as my Standard VM in 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();
}
Here is the CustonJavaFileObject:
class CustomJavaFileObject extends SimpleJavaFileObject {
protected CustomJavaFileObject(URI uri, Kind kind) {
super(uri, kind);
}
}
What am I doing wrong?
EDIT:
I do not have the JDK in my PATH (and I can't add it)
Here is my stack trace:
java.lang.NullPointerException
at package.Compiler.compile(Compiler.java:20)
at package.Interactive.main(Interactive.java:19)
回答1:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
causes the issue. Point your JRE to be inside the JDK as unlike jdk, jre does not provide any tools.
来源:https://stackoverflow.com/questions/7616886/java-compiler-api-nullpointerexception