首页 > 解决方案 > 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 很陌生,如果这是一个非常简单的错误,我很抱歉。

提前感谢您的任何回复/反馈。

标签: javaeclipseoopimportclassnotfoundexception

解决方案


您正在使用的引用库(apache common lang3)和任何其他库都以三种不同的方式使用。

  1. 首先,您在开发过程中需要该库,以便您的 IDE 可以在您从库中调用类、对象和方法时验证您的代码。
  2. 在编译期间,您需要该库,因此 java 编译器可以引用正确的路径,并在可能的情况下优化您的代码。
  3. 在运行时,当您的程序由 Java 虚拟机运行时,您需要该库,以便它可以从库中找到您使用的任何内容。

前两个通常被视为一个,因为两者通常都被认为是“编译时间”,尽管严格来说只有第二个实际上是。这意味着您需要为 IDE(第 1 点和第 2 点)和程序(第 3 点)准备好库。您的异常被抛出,因为在运行时,ClassLoader 找不到您的库。ClassLoader 是 JVM 为其使用的程序加载类的方式。如果JVM没有找到一个类,它就不能继续执行你正在运行的Thread,你很可能只运行了一个Thread(一个主线程)。

因此,您的程序中断并停止运行。请重新检查您正在使用的关于如何正确导入库的教程或将库导出到lib您正在导出的 jar 旁边的文件夹中。

编辑:使用最新版本的 Eclipse 并将项目导出为可运行 jar 时,系统会询问您要以何种方式处理库:

在此处输入图像描述

如果您没有看到导出对话框的这一部分,则说明您做错了(可能您没有导出为可运行的 jar)。


推荐阅读