我找到并修改了下面的代码,以编程方式编译Java类:
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class CompileHello {
public static void main(String[] args) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null , null , "C:\\Users\\quickCoder\\Desktop\\Hello.java");
System.out.println("Compile result code = " + result);
}
}
但是,我一直收到以下错误:
Exception in thread "main" java.lang.NullPointerException
at CompileHello.main(CompileHello.java:8)
Line 8
如下:
int result = compiler.run(null, null , null , "C:\\Users\\quickCoder\\Desktop\\Hello.java");
我确保输入的文件路径是我编写的Java类的实际路径。
答案 0 :(得分:4)
我怀疑问题是"编译器"正在返回" null"在Eclipse环境中,但在NetBeans环境中为非null。
注意:
http://blog.nobel-joergensen.com/2008/07/16/using-eclipse-compiler-to-create-dynamic-java-objects-2/
但是要获得对JDK编译器的访问权限,您需要运行您的 来自JDK的应用程序,因为这不是默认行为,我 选择使用Eclipse编译器instaid。 (除了Eclipse 编译器共享相同的接口,因此两个编译器应该表现出来 相似)。
如果您想在Eclipse环境中运行,同一链接将讨论如何使用 Eclipse 编译器进行指定。
但是,您可以指向任何 JDK:
How to set classpath when I use javax.tools.JavaCompiler compile the source?
答案 1 :(得分:1)
编译器是JDK的一部分。如果在JRE中运行此代码,它将失败。整个技术也是如此。重新考虑你的要求。