如何解决 ClassNotFoundException?
我正在尝试运行Java应用程序,但收到此错误:
java.lang.ClassNotFoundException:
冒号后面是缺少的类的位置。但是,我知道该位置不存在,因为该类位于其他位置。如何更新该类的路径?它与类路径有关吗?
我正在尝试运行Java应用程序,但收到此错误:
java.lang.ClassNotFoundException:
冒号后面是缺少的类的位置。但是,我知道该位置不存在,因为该类位于其他位置。如何更新该类的路径?它与类路径有关吗?
类路径是从中装入类的位置列表。
这些“位置”可以是目录或 jar 文件。
对于目录,JVM 将遵循加载类的预期模式。如果我的类路径中有目录 C:/myproject/classes,并且我尝试加载一个类 com.mycompany.Foo,它将在类目录下查找一个名为 com 的目录,然后在该目录下查找一个名为 mycompany 的目录,最后它将在该目录中查找一个名为 Foo.class 的文件。
在第二个实例中,对于 jar 文件,它将在 jar 文件中搜索该类。jar文件实际上只是像上面这样的目录的压缩集合。如果解压缩一个 jar 文件,你会得到一堆遵循上述模式的目录和类文件。
因此,JVM 在尝试加载类定义时,会从头到尾遍历类路径,以查找类的定义。例如,在类路径中:
C:/myproject/classes;C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar
JVM 将首先尝试在目录类中查找,然后在内容中查找.jar最后在 otherstuff.jar。
当您获得ClassNotFoundException时,这意味着JVM已经遍历了整个类路径,并且没有找到您尝试引用的类。与Java世界中经常发生的那样,解决方案是检查您的类路径。
您可以在命令行上定义一个类路径,方法是说 java -cp,然后说出您的类路径。在 Eclipse 等 IDE 中,您将有一个菜单选项来指定类路径。
你的类路径坏了(这在Java世界中是一个非常普遍的问题)。
根据启动应用程序的方式,需要将参数修改为 MANIFEST 中的类路径条目。MF 或磁盘布局。-cp