如何解决 ClassNotFoundException?

新手上路,请多包涵

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

java.lang.ClassNotFoundException:

冒号之后是缺少类的位置。但是,我知道该位置不存在,因为该类位于其他地方。我怎样才能更新那个类的路径?它与类路径有关吗?

原文由 user2426316 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 877
2 个回答

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

根据您启动应用程序的方式,您需要修改 -cp 的参数、MANIFEST.MF 中的类路径条目或磁盘布局。

原文由 Thorbjørn Ravn Andersen 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

这些“位置”可以是目录或 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 将尝试首先在目录 classes 中查找,然后在 stuff.jar 中,最后在 otherstuff.jar 中。

当您收到 ClassNotFoundException 时,这意味着 JVM 遍历了整个类路径,但没有找到您试图引用的类。解决方案,就像在 Java 世界中经常出现的那样,是检查您的类路径。

您通过说 java -cp 然后是您的类路径在命令行上定义类路径。在 Eclipse 等 IDE 中,您将有一个菜单选项来指定您的类路径。

原文由 user2000590 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题