java - Java Library Commons Lang3 'ClassNotFoundException' 错误
问题描述
import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;
public class MonsterGame {
public static void main(String[] args)
{
Monster.buildBattleBoard();
char[][] tempBattleBoard = new char[10][10];
// ObjectName[] ArrayName = new ObjectName[4];
Monster[] Monsters = new Monster[4];
// Monster(int health, int attack, int movement, String name)
Monsters[0] = new Monster(1000, 20, 1, "Frank");
Monsters[1] = new Monster(500, 40, 2, "Drac");
Monsters[2] = new Monster(1000, 20, 1, "Paul");
Monsters[3] = new Monster(1000, 20, 1, "George");
Monster.redrawBoard();
for (Monster m : Monsters) {
if(m.getAlive()) {
int arrayItemIndex = ArrayUtils.indexOf(Monsters, m);
m.moveMonster(Monsters, arrayItemIndex);
}
}
Monster.redrawBoard();
}
}
尝试运行此代码时,出现此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/ArrayUtils
at MonsterGame.main(MonsterGame.java:55)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.ArrayUtils
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 1 more
我有两个文件,在同一个包中。我只展示了这个,因为我不相信另一个文件是问题所在。我遵循了有关如何使用 java 库的教程:下载、导入、构建路径等。
这里的问题是,导入似乎很好,但实际上使用库是问题所在。
我对 Java 很陌生,如果这是一个非常简单的错误,我很抱歉。
提前感谢您的任何回复/反馈。
解决方案
您正在使用的引用库(apache common lang3)和任何其他库都以三种不同的方式使用。
- 首先,您在开发过程中需要该库,以便您的 IDE 可以在您从库中调用类、对象和方法时验证您的代码。
- 在编译期间,您需要该库,因此 java 编译器可以引用正确的路径,并在可能的情况下优化您的代码。
- 在运行时,当您的程序由 Java 虚拟机运行时,您需要该库,以便它可以从库中找到您使用的任何内容。
前两个通常被视为一个,因为两者通常都被认为是“编译时间”,尽管严格来说只有第二个实际上是。这意味着您需要为 IDE(第 1 点和第 2 点)和程序(第 3 点)准备好库。您的异常被抛出,因为在运行时,ClassLoader 找不到您的库。ClassLoader 是 JVM 为其使用的程序加载类的方式。如果JVM没有找到一个类,它就不能继续执行你正在运行的Thread,你很可能只运行了一个Thread(一个主线程)。
因此,您的程序中断并停止运行。请重新检查您正在使用的关于如何正确导入库的教程或将库导出到lib
您正在导出的 jar 旁边的文件夹中。
编辑:使用最新版本的 Eclipse 并将项目导出为可运行 jar 时,系统会询问您要以何种方式处理库:
如果您没有看到导出对话框的这一部分,则说明您做错了(可能您没有导出为可运行的 jar)。
推荐阅读
- vue.js - 尝试使用 highcharts-vue 包装器设置 xAxis 极值
- reactjs - React + Styled Components:每次渲染 setState 都会重置所有组件
- swift - 如何快速刷新所有视图控制器
- python - Hive - 在 Python UDF 中处理 NULL 输入值
- c# - 如何在下拉列表中获取整个月的日期?C#
- google-api - 如何检查用户是否拥有 Youtube v3 API commentThreads 上的评论
- html - 为什么文本在移动版 chrome 中与顶部对齐,而在 chrome 桌面版中位于中间?
- laravel - 在 laravel 我的控制器 3 字段值没有通过
- google-cloud-platform - 使用自定义脚本自定义实例的 Google Cloud 自定义 VM 实例
- c++ - 如何从json文件读取值数组到c++数组