首页 > 解决方案 > 单独 jar 文件中的 Java 类的超类,显示为 Object

问题描述

我有一个名为 Passthru 的类,它扩展了一个名为 Component 的类,该类保存在一个 jar 文件中。在运行时,我想加载 Passthru(使用带有一个或多个 jar 文件的 URLClassLoader,以及可选的本地目录),然后针对几种可能性测试超类,其中一种是 Component。如果 Passthru 和 Component 都在同一个 jar 文件中,即使是不同的包,这也很有效,但如果 Passthru 位于本地目录中(jar 文件中包含 Component,如前所述),则在 Passthru 上执行 getSuperClass 将返回 Object。我知道 Object 在 Passthru 的父级树中,但在这种情况下,我似乎无法找到 Passthru 的直接父级。我想我可以去 Passthru 的源并扫描以找到超类,但应该有更简单的方法......?!

我还注意到,在这两种情况下,Passthru 都使用我的 URLClassLoader 加载,但是当 Passthru 在本地目录中时,它的父加载器显示为“原始”加载器(null)——不知道这是否相关......

解决了!!这一个愚蠢的问题:原来目录中的源代码是后级的,并且与 jar 文件中的代码不匹配。另外,我没有将目录代码添加为 Eclipse 项目,因此显然 Eclipse 编译了此代码但没有给我任何错误指示,所以我没有看到“幕后”的编译错误。因此,当我纯粹在 jar 文件中工作时,一切正常,但是当我转到目录时,编译错误阻止了那里的类拾取 Component 类。感谢那些回答我问题的人——如果我浪费了你的时间,对不起!

标签: javaurlclassloader

解决方案


推荐阅读