如何解决java.lang.NoClassDefFoundError?

林宗盛:

我已经在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”(包含图形的文件夹),进行编译,然后使用java graphics.Main(从命令行)运行它,即可正常工作。

真的晚了更新#2

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

塞缪尔:

编译代码后,最终将得到.class程序中每个类的文件。这些二进制文件是Java解释为执行程序的字节码。NoClassDefFoundError指示类加载器(在这种情况下java.net.URLClassLoader),这是负责动态加载类,无法找到.class该类你试图使用的文件。

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

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

旁注:我建议您利用Java和JVM语言中已有的惊人工具。诸如Eclipse和IDEA之类的现代IDE以及诸如Maven或Gradle之类的构建管理工具将帮助您不必担心类路径(太多)而专注于代码!就是说,此链接说明了在命令行上执行时如何设置类路径。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError如何解决此错误

如何解决java.lang.NoClassDefFoundError?硒

如何解决java.lang.NoClassDefFoundError:使用javax / XML /绑定/ Java中JAXBException 9

Java:如何解决java.lang.NoClassDefFoundError:javax / xml / bind / JAXBException

如何解决NoClassDefFoundError:Apache Commons Lang Android

如何解决:javax.servlet.ServletException:java.lang.NoClassDefFoundError:javax / xml / ws / soap / SOAPFaultException

如何解决嵌套异常是java.lang.NoClassDefFoundError:org / springframework / security / web / util / AntPathRequestMatcher

如何解决java.lang.NoClassDefFoundError:org / aopalliance / aop / Advice错误?

如何解决java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook

运行使用IntelliJ IDE构建的Jar文件时,如何解决“ java.lang.NoClassDefFoundError:”?

在Kscript中导入库时,如何解决“ java.lang.NoClassDefFoundError”?

如何解决此错误“无法启用位置服务。错误:java.lang.NoClassDefFoundError”?

我如何解决 java.lang.NoClassDefFoundError: Failed resolution of: L(Activity Path)?

如何解决线程“ main”中的异常java.lang.NoClassDefFoundError

创建bat文件时如何解决java.lang.NoClassDefFoundError?

如何解决此错误:java.lang.NoClassDefFoundError:org / slf4j / impl / StaticLoggerBinder?

如何解决 java.lang.NoClassDefFoundError: io/cucumber/core/runtime/TypeRegistryConfigurerSupplier 异常

java.lang.NoClassDefFoundError

“ java.lang.NoClassDefFoundError”

在Spring Boot中的何处如何解决“ java.lang.NoClassDefFoundError:org / springframework / data / mapping / context / MappingContext”?

我如何解决此错误线程“主”中的异常java.lang.NoClassDefFoundError:javax / crypto / SecretKey

Android:java.lang.NoClassDefFoundError

“ java.lang.NoClassDefFoundError:结果”

可怕的java.lang.NoClassDefFoundError

PowerMockito:java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError:groovy / lang / GroovyObject

如何解决java.lang.IllegalStateException?

如何解决java.lang.NoSuchMethodError