如何解决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的,但它们有类似的概念。
4 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
NoClassDefFoundError
可能会发生多种原因,如
- ClassNotFoundException-未找到该引用类的.class,无论它在编译时是否可用(即基类/子类)。
- 类文件已定位,但初始化静态变量时会引发异常。
- 类文件定位,初始化静态块时引发异常。
在最初的问题中,这是第一个可以通过将CLASSPATH设置为引用的类JAR文件或其包文件夹来纠正的情况。
说“编译时可用”意味着什么?
- 代码中使用引用的类。
例句:两个班,A和B(扩展A)。如果在代码中直接引用B,则在编译时可用,即A=新B();
说“编译时不可用”意味着什么?
- 编译时类和运行时类是不同的,例如,基类使用子类的类名加载,例如Class.forName(“classname”)
例句:两个班,A和B(扩展A)。代码
a=Class.forName(“B”).newInstance();
慕斯709654
TA贡献1840条经验 获得超5个赞
NoClassDefFoundError
Compile time
Runtime
.
shapes
, linepoints
spaceobjects
.classpath
添加回答
举报
0/150
提交
取消