问题
I got this Java code from another Stack Overflow thread
import java.io.*;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class Main {
public static void main(String[] args) throws IOException{
String source = " public class Test { public static void main(String args[]) { System.out.println(\"hello\"); } }";
// Save source in .java file.
File root = new File("C:\\java\\");
root.mkdir();
File sourceFile = new File(root, "\\Test.java");
Writer writer = new FileWriter(sourceFile);
writer.write(source);
writer.close();
// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
}
}
But I keep getting a NullPointerException like this
Exception in thread "main" java.lang.NullPointerException
at com.zove.compiler.Main.main(Main.java:24)
It does compile but it throws the exception at runtime. What am I doing wrong?
回答1:
Your code works fine for me when I execute it using the JDK. If I execute it using the JRE I get a NullPointerException on compiler.run(...)
like you.
Therefore I assume that you only have to switch the Java runtime for executing your code.
回答2:
Well you can't compile java programs using the JRE.
So you have to have the JDK in your path so that the compilation be possible.
In your case without even running your program if you run in command line:javac
you would get
'javac' is not recognized as an internal or external command
This is why you get the null pointer exception.
来源:https://stackoverflow.com/questions/7665809/programmatically-compile-java-with-javacompiler