Я получаю ‘NoClassDefFoundError’

#java #lwjgl #noclassdeffounderror

#java #lwjgl #ошибка noclassdeffounderror

Вопрос:

Я только начинаю изучать LWJGL3, но по какой-то причине импорт не работает. Я попробовал 2 способа установки LWJGL3, в первый раз я следовал видеоуроку, во второй раз я установил его так, как мне было указано в официальном руководстве по установке (Руководство). Все банки, поставляемые с LWJGL3, включены в системную библиотеку JRE. Ошибка появляется, как только я пытаюсь использовать glfw.

Изображение моего рабочего пространства

Код:

 import static org.lwjgl.glfw.GLFW.*;
import org.lwjgl.glfw.GLFWVidMode;

public class Main {
    public static void main(String[] args) {
        if (!glfwInit()) {
            throw new IllegalStateException("Failed to initialise GLFW");
        }
        
        glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
        long window = glfwCreateWindow(640, 480, "LWJGL Porgramme", glfwGetPrimaryMonitor(), 0);
        if(window == 0) {
            throw new IllegalStateException("Failed to create window");
        }
        
        GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor());
        glfwSetWindowPos(window, (videoMode.width() - 640) / 2, (videoMode.height() - 480)/ 2);
        
        glfwShowWindow(window);
        
        while (!glfwWindowShouldClose(window)) {
            glfwPollEvents();
        }
    }
}
  

Ошибка:

 
    Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/glfw/GLFW
        at Main.main(Main.java:6)
    Caused by: java.lang.ClassNotFoundException: org.lwjgl.glfw.GLFW
        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

  

Редактировать: загрузчик классов не может загрузить класс, но я не знаю, почему он не может загрузить класс, поскольку он добавлен во «внешние банки». Изображение

Комментарии:

1. Не могли бы вы уточнить «включены в системную библиотеку JRE». Если у вас нет более простых вариантов, вы должны иметь возможность 1) распечатать путь к классу в модуле, который пытается импортировать (используя загрузчик классов этого модуля / класса), 2) подтвердить, что jar, в котором, по вашему мнению, находится рассматриваемый класс, действительно находится на пути к классу, 3)распакуйте jar и убедитесь, что класс действительно находится там, с правильным полным именем. Есть ли у вас какие-либо другие установленные вами библиотеки, к которым вы могли бы попытаться получить доступ, чтобы определить, является ли проблема этой конкретной библиотекой или не встроенными библиотеками в целом

2. Я предполагаю, что ваш код компилируется. Это означало бы, что конфигурация «сборки» в вашей IDE верна. Так что сравните это с вашей конфигурацией запуска. Используете ли вы Intellij в качестве IDE?

3. Я использую Eclipse в качестве своей среды разработки.

4. Стив, говоря «включены в системную библиотеку JRE», я имел в виду, что я добавил их во «внешние банки», в путь сборки. И я не вижу никаких других библиотек, которые я установил.

5. Какая версия Eclipse и какая версия java?

Ответ №1:

Это заняло слишком много времени, но я заставил его работать. Я установил LWJGL3 с помощью Gradle, создал проект Gradle и скопировал исходный код Java в проект Gradle.