Java库公用区Lang3'ClassNotFoundException'错误

问题描述 投票:0回答:1
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还是很陌生,如果这是一个非常简单的错误修复,对不起。

谢谢您的任何回应/反馈。

java eclipse oop import classnotfoundexception
1个回答
2
投票

您正在使用的引用库(Apache通用lang3)和用于此问题的任何其他库都以三种不同方式使用。

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

前两个通常被视为一个,因为通常都将二者视为“编译时间”,尽管严格来讲实际上只有第二个是。这意味着您需要为IDE(针对点1和2)和程序(针对点3)准备好相应的库。引发您的异常,因为在运行时,ClassLoader找不到您的库。 ClassLoader是JVM为其使用的程序加载类的方式。如果JVM找不到类,则它无法继续执行您正在运行的线程,并且您可能只在运行一个线程(一个主线程)。

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

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

enter image description here

如果未在导出对话框中看到此小节,则说明您做错了(可能不是作为可运行的jar导出)。

© www.soinside.com 2019 - 2024. All rights reserved.