gpt4 book ai didi

java - 在运行时加载内部类

转载 作者:行者123 更新时间:2023-12-02 23:42:04 25 4
gpt4 key购买 nike

我有一个程序,可以编译某人在文本框中编写的java代码,然后运行它。他们输入完整的源代码、类和所有内容

我将他们编写的类保存到随机的java源文件中,然后通过类加载器编译并加载该类。这非常有效。

不过,我有一个新问题,即子类问题。我给外部类一个唯一的名称,然后加载该类。

例如。

TEMP1110.java -> TEMP1110.class 等对于内部类,它编译为 TEMP1110$InnerClass.class我尝试通过类加载器加载此类,但是当外部类调用它时: new InnerClass().method();

它给了我这个:java.lang.NoClassDefFoundError:TEMP1110$InnerClass

有什么怪癖或者我做错了什么吗?

我的类加载器:

private static class JClassLoader extends ClassLoader {
public Class buildClass(final byte[] data, final String className) {
return (Class) defineClass(className, data, 0, data.length);
}
}

classNameTEMPCLASS$InnerClass,data 为表示类文件的字节。这适用于外部类。

最佳答案

我认为“new InnerClass()”使用正常的类加载和类路径搜索来查找类。由于您生成的 .class 文件不在类路径中,因此无法找到它。

尝试动态操作类路径以添加 .class 文件所在的文件夹:

String currentPath = System.getProperty("java.library.path");
System.setProperty( "java.library.path", current + ":/path/to/my/classfiles" );

// this forces JVM to reload "java.library.path" property
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );

关于java - 在运行时加载内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6917261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com