作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序,可以编译某人在文本框中编写的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);
}
}
className
为 TEMPCLASS$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/
我是一名优秀的程序员,十分优秀!