用于动态编译的 Javac 不起作用

Javac for dynamic compilation is not working

我正在尝试编译一个 HelloWorld class 作为测试,它显示了一个我不知道如何解决的错误。似乎是关于版本不兼容的问题,但是当我执行 java -versionjavac -version 时都显示 1.8.0_73。

这是我要编译的内容:

String arquivo2 = "/C:/classes/HelloWorld.java";
PrintWriter saida = new PrintWriter(new FileWriter("logCompilacao.txt"));
int resultadoCompilacao = com.sun.tools.javac.Main.compile(new String[]{arquivo2},saida);

但这是输出:

/C:/classes/HelloWorld.java:2: cannot access java.lang.Object
bad class file: C:\Program Files\Java\jre1.8.0_73\lib\rt.jar(java/lang/Object.class)
class file has wrong version 52.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public class HelloWorld {
       ^
1 error

"class file has wrong version 52.0, should be 49.0"。有人知道如何解决这个问题吗?试了很多都没找到解决方法

您从另一端添加了一些外部内容以便能够 运行 java 编译器。

这不是一个好方法。您很可能只安装了 JRE(运行time 环境)。

相反,您应该下载安装 JDK(开发工具包)。后者自带javac;您可以放心,它的 "javac" 和 "java" 二进制文件可以很好地协同工作。

因此:确保您从正确的环境开始;不是你从这里或那里收集的东西。

我终于找到解决办法了。似乎默认情况下 eclipse 只导入 jre jar,所以我不得不将在我的 jdk 文件夹中找到的文件 'tools.jar' 添加为外部 jar。 C:\Program Files\Java\jdk1.8.0_73\lib\tools.jar。 之后我可以编译我的 类