我发现以下代码:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

if(compiler.run(null, null, null, fileName) != 0) {
    System.err.println("Could not compile.");
    System.exit(0);
}


但是,这将返回NullPointerException

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at net.foxycorndog.foxy.compiler.Compiler.compile(Compiler.java:25)
at net.foxycorndog.foxy.compiler.Parser.parse(Parser.java:41)
at net.foxycorndog.foxy.Foxy$ActionHandler.actionPerformed(Foxy.java:99)


我读到JRE不包含在Java程序中进行编译的功能,但JDK包含。

我不希望该程序仅在少数几台必须手动设置JDK库而不是JRE路径的计算机上工作。考虑到这一点,是否可以解决此问题?

我也希望它可以跨平台工作。

最佳答案

JRE不包含编译器,而JDK包含编译器,这一事实尚无解决方法。如果要使用Java编译器,则需要使用JDK运行程序。

但是,还有其他方法可以在运行时创建可执行Java代码。有各种字节码汇编器,可让您无需编译器即可动态地构建代码。 ASM是个艰难的人; Apache BCEL是另一个。

09-25 21:20