【发布时间】:2013-08-01 04:34:15
【问题描述】:
我已经尝试了 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 包后(我在其中添加了package graphics;),将类路径设置为“_test”(包含图形的文件夹),编译它,然后使用@987654333 运行它@(从命令行),它起作用了。
更新 #2 真的晚了
我没有使用Eclipse(只是Notepad++ 和JDK),上述更新解决了我的问题。但是,这些答案似乎很多是针对 Eclipse 和IntelliJ IDEA 的,但它们的概念相似。
【问题讨论】:
-
查看你的主类,它不在一个包中(你会在顶部有
package graphics;)。graphics是你的包结构的负责人吗? Square的顶部有package graphics.shapes吗? -
您列出了 .java 文件的位置,但由于您得到的是 runtime 问题,因此您真正感兴趣的是 .class 的位置文件是以及它们是否在您的类路径中。你是如何执行 Main 类的?
-
只需在 Eclipse 中按 Shift+ctrl+o 即可组织您的导入
-
确保您输入了正确的类名。我收到此错误是因为我没有以大写字母开头的类名
-
这有时会在 IntelliJ IDEA 中发生重大重构后。 右键单击您的项目并选择 -> 编译模块,然后重新启动项目,它应该会再次工作。
标签: java exception package noclassdeffounderror