我已经尝试了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类放入图形包之后(我添加了图形包;对于它),将类路径设置为“_test”(包含图形的文件夹),编译它,并使用Java图形运行它。Main(从命令行),它工作正常。

真的很晚更新#2

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


当前回答

对于Meteor或Cordova用户,

这可能是由您使用的Java版本引起的。对于Meteor和Cordova,现在坚持使用版本8。

检查可用的Java版本/usr/libexec/java_home -V,并查找Java版本8的路径名 设置Java版本8的路径 出口JAVA_HOME = /图书馆/ Java / Home / JavaVirtualMachines / jdk1.8.0_191.jdk /内容 检查是否完成 echo $ JAVA_HOME

继续编写代码。

其他回答

NoClassDefFoundError意味着类在编译时存在于类路径中,但在运行时不存在于类路径中。

如果您正在使用Eclipse,请确保在.classpath文件中将形状、线点和空间对象作为条目。

在一个NetBeans项目上工作了好几个月之后,在收到“低内存”警报后不久,我突然收到了NoClassDefFoundError消息。进行Clean重建并没有帮助,但是完全关闭NetBeans并重新启动项目时没有出现错误报告。

我今天遇到了这个问题。我有一个Android项目,启用multidex后,项目将不再启动。

原因是我忘记了调用特定的multidex方法,该方法应该添加到Application类中,并在所有其他事情之前调用。

 MultiDex.install(this);

遵循本教程正确启用multidex。https://developer.android.com/studio/build/multidex.html

您应该将这些行添加到Application类中

 @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
java.lang.NoClassDefFoundError

指示在编译时找到了一些东西,但在运行时没有找到。也许你只需要把它添加到类路径中。

如果你最近在Android Studio中添加了这样的multidex支持:

// To support MultiDex
implementation 'com.android.support:multidex:1.0.1'

所以你的解决方案只是从MultiDexApplication扩展而不是Application:

public class MyApp extends MultiDexApplication {