Java Ошибка 'ClassNotFoundException' библиотеки Commons Lang3 - PullRequest
0 голосов
/ 29 мая 2020
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 библиотек: загрузка, импорт, путь сборки и т. Д. c.

Проблема в том, что импорт, кажется, в порядке, но на самом деле проблема заключается в использовании библиотеки.

Я новичок в Java, извините, если эту ошибку очень просто исправить.

Заранее благодарим вас за любой ответ / отзыв.

1 Ответ

2 голосов
/ 29 мая 2020

Используемая вами библиотека (apache common lang3) и любая другая библиотека в этом отношении используются тремя разными способами.

  1. Во-первых, вам понадобится библиотека во время разработки, поэтому ваш IDE может проверять ваш код, когда вы вызываете классы, объекты и методы из библиотеки.
  2. Во время компиляции вам нужна библиотека, поэтому java компилятор может ссылаться на правильные пути и оптимизировать ваш код, где это возможно .
  3. Библиотека нужна вам во время выполнения, когда ваша программа запускается виртуальной машиной Java, чтобы она могла найти все, что вы использовали, из библиотеки.

Первые 2 обычно рассматриваются как один, потому что оба обычно считаются «временем компиляции», хотя, строго говоря, на самом деле таковым является только второй. Это означает, что вам необходимо иметь библиотеку для IDE (для точек 1 и 2) и для программы (точка 3). Выдается исключение, потому что во время выполнения ваша библиотека не найдена ClassLoader. ClassLoader - это способ, которым JVM загружает классы для программ, которые она использует. Если JVM не находит класс, она не может продолжать выполнение текущего потока, и вы, вероятно, работаете только с одним потоком (основным потоком).

Следовательно, ваша программа прерывается и перестает работать. Пожалуйста, либо перепроверьте учебник, который вы используете о том, как правильно импортировать библиотеки, либо экспортируйте библиотеку в папку lib рядом с экспортируемой банкой.

Изменить: при использовании последней версии eclipse и экспортируя проект как runnable jar, вас спросят, каким образом вы хотите обрабатывать библиотеки:

enter image description here

Если вы не видите этот подраздел экспорта диалоговое окно, вы делаете что-то неправильно (вероятно, вы не экспортируете как runnable jar).

...