繁体   English   中英

尝试在Eclipse中运行时,LWJGL中的java.lang.NoClassDefFoundError

[英]java.lang.NoClassDefFoundError in LWJGL when attempting to run in Eclipse

因此,我是一名中等程度的新手程序员,但是经过一段时间的努力,我找不到解决方案。 我正在制作一个益智游戏,由于某种原因,它现在拒绝运行。 我总是收到此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.lwjgl.system.Library
    at org.lwjgl.system.MemoryAccess.<clinit>(MemoryAccess.java:22)
    at org.lwjgl.system.Pointer.<clinit>(Pointer.java:24)
    at org.lwjgl.glfw.GLFW.<clinit>(GLFW.java:594)
    at Graphics.LaunchWindow.run(LaunchWindow.java:32)
    at Graphics.LaunchWindow.main(LaunchWindow.java:96)

Eclipse告诉我,我的代码中都没有错误,并且重新安装LWJGL不起作用(我尝试了稳定的3.0.0b build 64和夜间的3.0.0 build 22)。 关于确保lwjgl.jar位于类路径中,我已经看到了其他类似的问题,但是我已经多次确认。 另外,如果很重要,我在类路径中也有lwjgl_util.jar和slick_util.jar,即使它们与lwjgl 3相比已经过时,将它们从类路径中删除也没有什么区别。

package Graphics;

import org.lwjgl.glfw.*;
import org.lwjgl.opengl.*;

import Controls.KeyParser;
import Controls.KeyboardInput;

import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.*;

public class LaunchWindow {

private GLFWErrorCallback errorCallback;
private GLFWKeyCallback   keyCallback;

public int width = 1024;
public int height = 600;
public String title = "Duplicity";
public long fullscreen = NULL;
public long window;

public void run() {

    try {
        init();
        loop();
        glfwDestroyWindow(window);
        keyCallback.release();
    } finally {
        glfwTerminate();
        errorCallback.release();
    }
}

private void init() {

    glfwSetErrorCallback(errorCallback = GLFWErrorCallback.createPrint(System.err));

    KeyboardInput.initiate();

    if ( glfwInit() != GLFW_TRUE )
        throw new IllegalStateException("Unable to initialize GLFW");

    if(fullscreen == NULL){
        glfwDefaultWindowHints();
        glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
        glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
    }

    window = glfwCreateWindow(width, height, title, fullscreen, NULL);
    if (window == NULL)
        throw new RuntimeException("Failed to create the GLFW window");

    glfwSetKeyCallback(window, keyCallback = new GLFWKeyCallback() {
        @Override
        public void invoke(long window, int key, int scancode, int action, int mods) {
            if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE )
                glfwSetWindowShouldClose(window, GLFW_TRUE);
        }
    });

    GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
    glfwSetWindowPos(window, (vidmode.width() - width) / 2, (vidmode.height() - height) / 2);
    glfwMakeContextCurrent(window);
    glfwSwapInterval(1);
    glfwShowWindow(window);

    keyCallback = GLFWKeyCallback.create(KeyboardInput::glfw_key_callback);
    keyCallback.set(window);

    /* mouseButtonCallback = GLFWMouseButtonCallback.create(Mouse::glfw_mouse_button_callback);
    mouseButtonCallback.set(window);

    cursorPosCallback = GLFWCursorPosCallback.create(Mouse::glfw_cursor_pos_callback);
    cursorPosCallback.set(window); */

    GL.createCapabilities();
}

public void loop() {

    GL.createCapabilities();
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

    while ( glfwWindowShouldClose(window) == GLFW_FALSE ) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glfwSwapBuffers(window); 
        glfwPollEvents();
        new KeyParser().checkKeyState();
    }
}

public static void main(String[] args) {
    new LaunchWindow().run();
}
}

不正确的系统库路径可能是导致此错误的原因之一,但这也可能是由于系统库不兼容(在Linux上)引起的。 LWJGL 3中包含的代码要求GLIBC版本2.14或更高版本。 如果您的系统(例如Linux)较旧(例如Debian Wheezy),则您的GLIBC版本将比所需的版本更旧。 如果是这种情况,则需要安装更新的GLIBC版本或升级系统(例如,升级到Debian Jessie)。 HTH,

中号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM