Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译.java文件并从中执行函数_Java_Java Compiler Api - Fatal编程技术网

编译.java文件并从中执行函数

编译.java文件并从中执行函数,java,java-compiler-api,Java,Java Compiler Api,好的,我有一个程序,用户可以在其中写入.java文件,并执行它(在运行时…duh!!)。 目前,用户只能编辑一个.java文件(目前)。 现在我想编译.java文件并将其转换成.class文件。 要运行该文件,我希望用户有一个void main()函数,我只需执行该函数即可运行它。 因此,我使用JTextArea、BufferedReader、BufferedWriter等工具使.java文件可编辑。 现在,我编写的编译该文件的代码是: JavaCompiler compiler = ToolP

好的,我有一个程序,用户可以在其中写入.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");
}
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
DiagnosticCollector diagnostics=新建DiagnosticCollector();
try(StandardJavaFileManager fileManager=compiler.getStandardFileManager(诊断,null,null)){

Iterable这里的问题是该类已加载到JVM。您必须卸载该类并重新加载新版本。如果在启动应用程序之前该类不存在,则该类应该可以工作

你必须创建你自己的类加载器,这样的事情才能工作,这肯定是一个困难的任务,我不知道有任何库/工具,除了

一个很好的方法是重命名你想要的类或者包,但是我不确定这是否适合你