好的,所以我有一个程序,用户可以在其中编写 .java 文件并执行它(在运行时....duh !!)。目前,用户只能编辑一个 .java 文件(暂时)。现在我想编译 .java 文件并将其制成 .class 文件。要运行该文件,我希望用户有一个void main()
函数,我只需执行该函数即可运行它。因此,我使用 JTextArea、BufferedReader、BufferedWriter 等使 .java 文件可编辑。现在我编写的用于编译文件的代码是:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null)) {
Iterable<? extends JavaFileObject> compilationUnits = filemanager.getJavaFileObjectsFromStrings(Arrays.asList("src/User/Script.java"));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits);
boolean success = task.call();
System.out.println(success);
} catch(IOException e){
System.out.println("IOException");
}
该代码将文件编译为 .class 文件。现在,当我从中执行主要功能时,它不起作用。事实上,成功的价值是真实的(因为它打印的是真实的)。完成后,用户按下“运行”按钮,我使用它来运行该功能:
Script script = new Script();
script.main();
现在由于某种原因,脚本不会自行更新。它仍然执行在修改脚本之前编写的相同内容....尽管文件按预期写入,但脚本仅在下次启动程序时才会进行某种“更新”。(我没有单独尝试过,但它在 IDE 中更新......这是 Netbeans)。
现在我不仅需要解决这个问题,而且还想解释正在做什么。请给我一个解释,说明什么是错的,为什么是错的以及需要做些什么来解决它。
问候,
拉克什