为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决java.lang.NoClassDefoundError?

如何解决java.lang.NoClassDefoundError?

梦里花落0921 2019-06-01 14:34:00
如何解决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可能会发生多种原因,如

  1. ClassNotFoundException-未找到该引用类的.class,无论它在编译时是否可用(即基类/子类)。


  2. 类文件已定位,但初始化静态变量时会引发异常。


  3. 类文件定位,初始化静态块时引发异常。


在最初的问题中,这是第一个可以通过将CLASSPATH设置为引用的类JAR文件或其包文件夹来纠正的情况。

说“编译时可用”意味着什么?

  • 代码中使用引用的类。


    例句:两个班,A和B(扩展A)。如果在代码中直接引用B,则在编译时可用,即A=新B();

说“编译时不可用”意味着什么?

  • 编译时类和运行时类是不同的,例如,基类使用子类的类名加载,例如Class.forName(“classname”)


    例句:两个班,A和B(扩展A)。代码


    a=Class.forName(“B”).newInstance();


查看完整回答
反对 回复 2019-06-01
?
慕斯709654

TA贡献1840条经验 获得超5个赞

NoClassDefFoundError表示类存在于类路径中。Compile time,但它并不存在于Runtime.

如果您正在使用Eclipse,请确保您有shapeslinepointsspaceobjects作为.classpath档案。


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 4995 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信