Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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 使用Toolprovider编译类并使用ClassLoader加载它们_Java_Classloader_Urlclassloader - Fatal编程技术网

Java 使用Toolprovider编译类并使用ClassLoader加载它们

Java 使用Toolprovider编译类并使用ClassLoader加载它们,java,classloader,urlclassloader,Java,Classloader,Urlclassloader,我试图加载在运行时生成编译的类。我可以编译这些代码而不会有任何问题: JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); List<File> sourceFileList = new ArrayList<File>();

我试图加载在运行时生成编译的类。我可以编译这些代码而不会有任何问题:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

List<File> sourceFileList = new ArrayList<File>();
sourceFileList.add(new File(sourceFile));
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(sourceFileList);
CompilationTask task = compiler.getTask(null, fileManager, null, null,null, compilationUnits);

没有成功(我不理解这些…)。你能帮我吗?或者给我一个简单的ho的例子,这样我就可以发展它了


提前感谢。

您的最后一次尝试应该会成功
myUrl
应该引用包含生成的.class的目录(或Jar)

myUrl = new URL("file:///myGeneratedCode/");

url必须以
“/”
结尾才能被视为目录,否则,它将假定为Jar文件。

您的最后一次尝试应该可以
myUrl
应该引用包含生成的.class的目录(或Jar)

myUrl = new URL("file:///myGeneratedCode/");

url必须以
“/”
结尾才能被视为目录,否则,它将假定为Jar文件。

我终于找到了“问题”。我犯了一个愚蠢的错误:我试图在关闭生成的java文件之前编译它。恼人的是JavaCompiler没有抛出任何异常

解决了这个问题并生成了类之后,我再也不用用类加载器加载它了


再次感谢。

我终于找到了“问题”。我犯了一个愚蠢的错误:我试图在关闭生成的java文件之前编译它。恼人的是JavaCompiler没有抛出任何异常

解决了这个问题并生成了类之后,我再也不用用类加载器加载它了


再次感谢。

您通过了课程的正确路径吗?您通过了课程的正确路径吗?好的,谢谢。但我不知道为什么在执行“task.call()”之后,任何地方都不会生成任何类,也不会在控制台或使用诊断报告任何错误。好的,谢谢。但我不知道为什么在执行“task.call()”之后,任何地方都不会生成任何类,也不会在控制台或使用诊断报告中报告任何错误。
myUrl = new URL("file:///myGeneratedCode/");