Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载类时发生java运行时错误_Java_Linker_Classloader - Fatal编程技术网

加载类时发生java运行时错误

加载类时发生java运行时错误,java,linker,classloader,Java,Linker,Classloader,我会尽力解释我们遇到的确切情况。如果你们还有其他问题,请告诉我。我不知道这是java链接问题还是java加载问题 我使用一个外部jar文件编译了代码,该文件在执行过程中发生了更改。 我在代码中引用了一个名为“Contract”的类文件。我在编译时使用的库有一个从“BaseContract”类扩展而来的“Contract”类。但是我在执行时使用的库没有超类(“BaseContract”)。在运行时,我得到一个错误,说找不到BaseContract类。引用“Contract”类的类称为“AppCla

我会尽力解释我们遇到的确切情况。如果你们还有其他问题,请告诉我。我不知道这是java链接问题还是java加载问题

我使用一个外部jar文件编译了代码,该文件在执行过程中发生了更改。 我在代码中引用了一个名为“Contract”的类文件。我在编译时使用的库有一个从“BaseContract”类扩展而来的“Contract”类。但是我在执行时使用的库没有超类(“BaseContract”)。在运行时,我得到一个错误,说找不到BaseContract类。引用“Contract”类的类称为“AppClass”

在编译时,java是否将其所有引用类的类层次结构存储在正在编译的类文件中。在我的具体示例中,java是否将“Contract”类的类层次结构存储在AppClass.class文件中?如果是这样,为什么java必须在这里存储类层次结构。在Contract.class文件中存储类“Contract”层次结构是否比在AppClass.class文件中更有效


非常感谢您的帮助或指点。

不,没有。每个类只知道它自己的类层次结构。但是,它也知道何时进行方法调用、创建对象等该方法的预期签名、该对象的类型等


如果没有与该期望匹配的可用项,则您将得到类未找到错误(或其他类似错误,具体取决于未找到的匹配项)。

类加载器将需要在运行时访问所有相关类。请在启动时将所有相关JAR放在类路径中。基本上,您在运行时要使用的任何类都必须定义,并且在Startup的类路径中,您的代码中是否有针对
BaseContract
的导入?您是否确保“打包”所有类?你的类中有导入BaseContract的吗?@Robert Beltran:包含“Contract”类文件的jar文件已经在类路径中了,但是类路径中的Contract类文件并不是从“BaseContract”类扩展而来的。我很困惑。也许我们可以看一些代码?当你说,“但是它也知道什么时候进行方法调用,创建对象,等等,该方法的预期签名,该对象的类型等等”,这只是在执行时,对吗,我反编译了AppClass.class文件,但它没有对BaseContract类的引用。在编译时,它需要访问库才能进行编译(即检查它是否调用了正确的方法等)。一旦编译完成,它就可以在没有其他类的情况下运行——但一旦它尝试调用或引用该类中的任何内容,那么如果类装入器找不到它,就会抛出异常。