2

我找到了这段代码:

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 路径的计算机上运行的程序。考虑到这一点,是否有解决此问题的方法?

如果可能的话,我也希望它能够跨平台工作。

4

1 回答 1

4

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

但是,还有其他方法可以在运行时创建可执行的 Java 代码;有各种字节码汇编器可以让您在不使用编译器的情况下动态构建代码。ASM是一种坚硬的岩石。Apache BCEL是另一个。

于 2012-04-15T00:05:34.643 回答