我正在尝试运行 Java 应用程序,但出现此错误:
java.lang.ClassNotFoundException:
冒号之后是缺少类的位置。但是,我知道该位置不存在,因为该类位于其他地方。我怎样才能更新那个类的路径?它与类路径有关吗?
原文由 user2426316 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试运行 Java 应用程序,但出现此错误:
java.lang.ClassNotFoundException:
冒号之后是缺少类的位置。但是,我知道该位置不存在,因为该类位于其他地方。我怎样才能更新那个类的路径?它与类路径有关吗?
原文由 user2426316 发布,翻译遵循 CC BY-SA 4.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 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
您的类路径已损坏(这在 Java 世界中是一个 非常 普遍的问题)。
根据您启动应用程序的方式,您需要修改
-cp
的参数、MANIFEST.MF 中的类路径条目或磁盘布局。