一尘不染

Java如何解决ClassNotFoundException?

java class

我正在尝试运行Java应用程序,但出现此错误:

java.lang.ClassNotFoundException:

冒号到达后,缺少该类的位置。但是,我知道该位置不存在,因为该类位于其他位置。如何更新该课程的路径?它与类路径有关吗?


阅读 372

收藏
2020-02-25

共2个答案

一尘不染

类路径是要从中加载类的位置的列表。

这些“位置”可以是目录,也可以是jar文件。

对于目录,JVM将遵循预期的模式加载类。如果我的类路径中有目录C:/ myproject / classes,并且尝试加载类com.mycompany.Foo,它将在classes目录下查找名为com的目录,然后在该目录下查找名为mycompany的目录,并最后,它将在该目录中查找名为Foo.class的文件。

在第二种情况下,对于jar文件,它将在jar文件中搜索该类。实际上,jar文件只是上述目录的压缩集合。如果解压缩jar文件,则会按照上述模式获得一堆目录和类文件。

因此,JVM在尝试加载类定义时会从头到尾遍历类路径,以查找该类的定义。例如,在classpath中:

C:/ myproject / classes; C:/myproject/lib/stuff.jar; C:/myproject/lib/otherstuff.jar

JVM将尝试首先在目录类中查找,然后在stuff.jar中查找,最后在otherstuff.jar中查找。

当您收到ClassNotFoundException时,表示JVM遍历了整个类路径,但未找到您尝试引用的类。在Java世界中,解决方案通常是检查类路径。

您可以在命令行中输入java -cp,然后输入您的类路径来定义类路径。在诸如Eclipse之类的IDE中,您将具有一个菜单选项来指定您的类路径。

2020-02-25
一尘不染

你的类路径已损坏(这是Java世界中非常普遍的问题)。

根据启动应用程序的方式,需要将参数修改为-cp,MANIFEST.MF中的Class-Path项或磁盘布局。

2020-02-25