如何解决java.lang.NoClassDefoundError?

如何解决java.lang.NoClassDefoundError?

我在Oracle的Java教程..它们都编译得很好,但在运行时,它们都出现了以下错误:

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包(我加了package graphics;),将类路径设置为“_test”(包含图形的文件夹),编译它,然后使用java graphics.Main(从命令行),它起作用了。

非常晚的更新#2

我没有使用Eclipse(只有记事本+和JDK),上面的更新解决了我的问题。然而,这些答案中似乎有许多是针对Eclipse和IntelliJ的,但它们有类似的概念。


梦里花落0921
浏览 5011回答 4
4回答

月关宝盒

NoClassDefFoundError可能会发生多种原因,如ClassNotFoundException-未找到该引用类的.class,无论它在编译时是否可用(即基类/子类)。类文件已定位,但初始化静态变量时会引发异常。类文件定位,初始化静态块时引发异常。在最初的问题中,这是第一个可以通过将CLASSPATH设置为引用的类JAR文件或其包文件夹来纠正的情况。说“编译时可用”意味着什么?代码中使用引用的类。例句:两个班,A和B(扩展A)。如果在代码中直接引用B,则在编译时可用,即A=新B();说“编译时不可用”意味着什么?编译时类和运行时类是不同的,例如,基类使用子类的类名加载,例如Class.forName(“classname”)例句:两个班,A和B(扩展A)。代码a=Class.forName(“B”).newInstance();

慕斯709654

NoClassDefFoundError表示类存在于类路径中。Compile time,但它并不存在于Runtime.如果您正在使用Eclipse,请确保您有shapes, linepoints而spaceobjects作为.classpath档案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java