我正在尝试加载外部jar中包含的所有类。我不能将jar作为库包含在我的项目中,我必须从用户定义的未知位置加载它。到目前为止,我正在使用扩展urlclassloader的类加载器加载类。这是来源:
Cast<string>
奇怪的是,在1800多个课程中,我只获得了37个课程和#34; NoClassDefFoundError&#34;抛出。这些课程没有加载,因为我的程序因为Nullpointers而无法正常工作。
这是我正在加载的jar:http://www.file-upload.net/download-11374317/craftbukkit-1.8.8.jar.html
就我所知,这是源头:https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/browse
这是我能找到的文档:https://hub.spigotmc.org/javadocs/bukkit/
我怎么能设法加载这37个班级?我尝试用字节读取它们并使用方法&#34; defineClass&#34;加载它们。类加载器,但这种方法也无法加载它们。有人知道如何解决这个问题吗?
答案 0 :(得分:1)
如果没有看到错误原因,很难知道。
通常这是由于类路径中没有包含依赖项(由ClassNotFoundException
导致无法加载超类的类加载器包含在NoClassDefFoundError
中)或静态中的某些运行时异常引起的田野或街区。
值得指出NoClassDefFoundError
:https://stackoverflow.com/a/5756989/4483113
答案 1 :(得分:0)
您的应用似乎达到了65K方法的限制,这是Android的一个非常着名的限制。 来源:https://developer.android.com/tools/building/multidex.html#dev-build
有关其他信息,请参阅: java.lang.NoClassDefFoundError exception on some devices
答案 2 :(得分:0)
java.lang.NoClassDefFoundError
和java.lang.NoSuchMethodError
会在运行时抛出,并且类加载器无法加载类,因为它不存在于类路径中。如果您的程序从不尝试在运行时访问类路径中不存在的类或方法,那么您将永远不会获得NoClassDefFoundError
或NoSuchMethodError
。