我通过获取基类的字节并通过自定义类适配器接受它来生成一个类。当我在作为基类产品生成的字节上调用define class时,我得到了这个错误:
Caused by: java.lang.NoClassDefFoundError: com/example/MyClassBase
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
... 24 more
Caused by: java.lang.ClassNotFoundException: com.example.MyClassBase
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 26 more
基类已由jar中的URLClassLoader加载。在defineClass中是否有一些底层方法调用抛出异常,因为它找不到加载的类?我该如何解决这个问题?
请记住,以不同的方式加载基类是不切实际的。作为问题的参数,我会假设它必须通过另一个jar的URLClassLoader加载。
答案 0 :(得分:1)
我认为您正在尝试通过无法看到该类的ClassLoader加载依赖于com.example.MyClassBase的修改后的字节码。当您创建自己的ClassLoader实例以加载修改后的类时,您应该chaining it to an existing ClassLoader using its constructor建立加载器的父/子层次结构,这有助于避免这个确切的问题。