Java .class 文件在我 运行 项目后立即消失
Java .class file disappeares as soon as I run the project
我一直在做一个多人游戏的俄罗斯方块项目,已经运行了几天没有问题,但现在突然出现了这个异常:
Exception in thread "main" java.lang.NoClassDefFoundError: Game/Piece
这基本上意味着它找不到我的 class 称为 Piece 的 .class,但是每当我执行“清理并构建”时,就会出现 .class 文件,然后当我 运行 项目时立即消失。
这是我的项目结构(运行 JDK 16,在 netbeans 中):
是否有此异常的原因?
我的JAVA_HOME
变量:jdk1.8.0_131.
虽然这可能是由于编译时间和 运行 时间之间的 class 路径不匹配,但这不一定是真的。
在这种情况下,将两个或三个不同的异常牢记在心很重要:
java.lang.ClassNotFoundException 此异常表示在 class 路径上找不到 class。这表明我们正在尝试加载 class 定义,而 class 在 class 路径上不存在。
java.lang.NoClassDefFoundError 此异常表明 JVM 在其内部 class 定义数据结构中查找 class 的定义并执行找不到它。这不同于说无法从 class 路径加载它。通常这表明我们之前尝试从 class 路径加载 class,但由于某种原因失败了 - 现在我们正在尝试再次使用 class(因此需要加载它,因为它上次失败了),但我们甚至不打算尝试加载它,因为我们之前加载它失败了(并且有理由怀疑我们会再次失败)。较早的失败可能是 ClassNotFoundException 或 ExceptionInInitializerError(表示静态初始化块中的失败)或任何数量的其他问题。关键是,NoClassDefFoundError 不一定是 class路径问题。
And this question has been asked before.
出现此类错误的原因有多种:
- 因为编译器与 JVM 差别太大,特别是新的 Java 语法。
就我个人而言,我在 运行 Java 16 代码和 Java 8 JRE 中遇到了这种类型的错误,我通过删除带有 Java 的包来修复它16码.
- 因为您使用的是已弃用的 class,自该日期起已被删除。
因此,要解决您的问题,有多种方法:
- 在 Netbeans 和您的项目配置中使用相同的 Java(以防止更改)
- 升级你的 Java JRE 安装(而不是旧的 Java 8 版本)以同时拥有 Java 16
- 将 Netbeans JDK 降级为 Java 8 以同时拥有 Java 8
objective 是使用与 JDK 相同的 JVM,以查看链接到您当前代码的所有 warns/error。
很明显我在编译时有一个警告(不是错误),它说有些东西被贬低了,所以我不得不添加一个编译器选项名称 -Xlint:(这里我不记得了),所以当我编译它,问题很明显,JFrame.hide() 是一个被贬低的函数,所以我只需要删除它。奇怪的是运行时错误是“NoClassDefFoundError”,这与问题无关。
我一直在做一个多人游戏的俄罗斯方块项目,已经运行了几天没有问题,但现在突然出现了这个异常:
Exception in thread "main" java.lang.NoClassDefFoundError: Game/Piece
这基本上意味着它找不到我的 class 称为 Piece 的 .class,但是每当我执行“清理并构建”时,就会出现 .class 文件,然后当我 运行 项目时立即消失。
这是我的项目结构(运行 JDK 16,在 netbeans 中):
是否有此异常的原因?
我的JAVA_HOME
变量:jdk1.8.0_131.
虽然这可能是由于编译时间和 运行 时间之间的 class 路径不匹配,但这不一定是真的。
在这种情况下,将两个或三个不同的异常牢记在心很重要:
java.lang.ClassNotFoundException 此异常表示在 class 路径上找不到 class。这表明我们正在尝试加载 class 定义,而 class 在 class 路径上不存在。
java.lang.NoClassDefFoundError 此异常表明 JVM 在其内部 class 定义数据结构中查找 class 的定义并执行找不到它。这不同于说无法从 class 路径加载它。通常这表明我们之前尝试从 class 路径加载 class,但由于某种原因失败了 - 现在我们正在尝试再次使用 class(因此需要加载它,因为它上次失败了),但我们甚至不打算尝试加载它,因为我们之前加载它失败了(并且有理由怀疑我们会再次失败)。较早的失败可能是 ClassNotFoundException 或 ExceptionInInitializerError(表示静态初始化块中的失败)或任何数量的其他问题。关键是,NoClassDefFoundError 不一定是 class路径问题。
And this question has been asked before.
出现此类错误的原因有多种:
- 因为编译器与 JVM 差别太大,特别是新的 Java 语法。
就我个人而言,我在 运行 Java 16 代码和 Java 8 JRE 中遇到了这种类型的错误,我通过删除带有 Java 的包来修复它16码.
- 因为您使用的是已弃用的 class,自该日期起已被删除。
因此,要解决您的问题,有多种方法:
- 在 Netbeans 和您的项目配置中使用相同的 Java(以防止更改)
- 升级你的 Java JRE 安装(而不是旧的 Java 8 版本)以同时拥有 Java 16
- 将 Netbeans JDK 降级为 Java 8 以同时拥有 Java 8
objective 是使用与 JDK 相同的 JVM,以查看链接到您当前代码的所有 warns/error。
很明显我在编译时有一个警告(不是错误),它说有些东西被贬低了,所以我不得不添加一个编译器选项名称 -Xlint:(这里我不记得了),所以当我编译它,问题很明显,JFrame.hide() 是一个被贬低的函数,所以我只需要删除它。奇怪的是运行时错误是“NoClassDefFoundError”,这与问题无关。