gpt4 book ai didi

java - 我该如何解决 "java.lang.NoClassDefFoundError"?

转载 作者:行者123 更新时间:2023-12-01 18:24:22 25 4
gpt4 key购买 nike

我已经尝试过 Oracle Java Tutorials 中的两个示例。它们都编译得很好,但是在运行时,都出现了这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: graphics/shapes/Square
at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: graphics.shapes.Square
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more

我认为 Main.java 文件可能位于错误的文件夹中。

这是目录层次结构:

graphics
├ Main.java
├ shapes
| ├ Square.java
| ├ Triangle.java
├ linepoint
| ├ Line.java
| ├ Point.java
├ spaceobjects
| ├ Cube.java
| ├ RectPrism.java

这是Main.java:

import graphics.shapes.*;
import graphics.linepoint.*
import graphics.spaceobjects.*;

public class Main {
public static void main(String args[]) {
Square s = new Square(2, 3, 15);
Line l = new Line(1, 5, 2, 3);
Cube c = new Cube(13, 32, 22);
}
}

我在这里做错了什么?

更新

Main类放入graphics包中(我向其中添加了packagegraphics;)后,将类路径设置为“_test”(包含图形的文件夹),编译它,并使用 javagraphics.Main (从命令行)运行它,它工作了。

更新#2 真的太晚了

我没有使用Eclipse (只是 Notepad++ 和 JDK),上面的更新解决了我的问题。然而,似乎其中许多答案都是针对 Eclipse 和 IntelliJ IDEA ,但它们有相似的概念。

最佳答案

编译代码后,您最终会得到程序中每个类的 .class 文件。这些二进制文件是 Java 解释以执行程序的字节码。 NoClassDefFoundError 表示负责动态加载类的类加载器(在本例中为 java.net.URLClassLoader)找不到 .class 您尝试使用的类的文件。

如果所需的类不存在,您的代码将无法编译(除非通过反射加载类),因此通常此异常意味着您的类路径不包含所需的类。请记住,类加载器(特别是 java.net.URLClassLoader)将在类路径中每个条目的文件夹 a/b/c/中查找包 a.b.c 中的类。 NoClassDefFoundError 还可能表明您缺少已编译并尝试使用的 .jar 文件的传递依赖项。

例如,如果您有一个类 com.example.Foo,编译后您将获得一个类文件 Foo.class。例如,您的工作目录是 .../project/。该类文件必须放置在 .../project/com/example 中,并且您可以将类路径设置为 .../project/

旁注:我建议利用 Java 和 JVM 语言现有的令人惊叹的工具。现代 IDE(如 Eclipse 和 IntelliJ IDEA)以及构建管理工具(如 Maven 或 Gradle)将帮助您不必担心类路径(尽可能多)并专注于代码!也就是说,this link解释了如何在命令行上执行时设置类路径。

关于java - 我该如何解决 "java.lang.NoClassDefFoundError"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60251027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com