java - LWJGL:glfwCreateWindow 返回 null

标签 java lwjgl

我正在尝试使用 Java 中的 LWJGL 库查看教程,但创建窗口时我将返回 null。

这是代码:

import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.*;
import java.nio.ByteBuffer;
import org.lwjgl.glfw.GLFWvidmode;

public class Main implements Runnable {
    private int height = 720, width = height / 9 * 16;
    private String title = "Game";

    private Thread thread;
    private boolean running = false;

    private long window;

    public void start() {
        running = true;
        thread = new Thread(this, title);
        thread.start();
    }

    private void init() {
        if(glfwInit() != GL_TRUE) {
            System.err.println("Non riesco ad inizializzare GLFW!");
            return;
        }

        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
        glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
        window = glfwCreateWindow(width, height, title, NULL, NULL);

        if(window == NULL) {
            System.err.println("Non riesco a creare una finestra GLFW!");
            return;
        }

        ByteBuffer vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
        glfwSetWindowPos(window, (GLFWvidmode.width(vidmode) - width) / 2, (GLFWvidmode.height(vidmode) - height) / 2);

        glfwMakeContextCurrent(window);
        glfwShowWindow(window);
    }

    @Override
    public void run() {
        init();
        while(running) {
            update();
            render();

            if(glfwWindowShouldClose(window) == GL_TRUE)
                running = false;
        }
    }

    private void update() {
        glfwPollEvents();
    }

    private void render() {
        glfwSwapBuffers(window);
    }

    public static void main(String[] args) {
        new Main().start();
    }
}

返回以下错误:

Non riesco a creare una finestra GLFW!
Exception in thread "Game" java.lang.NullPointerException
    at org.lwjgl.system.Checks.checkPointer(Checks.java:66)
    at org.lwjgl.glfw.GLFW.glfwSwapBuffers(GLFW.java:2546)
    at com.michele.flappybird.Main.render(Main.java:66)
    at com.michele.flappybird.Main.run(Main.java:54)
    at java.lang.Thread.run(Unknown Source)

我该如何解决?感谢所有试图帮助我的人。

最佳答案

我的第一个尝试是通过删除 Thread 来简化程序,因为 LWJGL 有时会在从主线程外部调用方法时遇到问题。第二次尝试是删除 glfwWindowHint(...) 方法,而是调用 glfwDefaultWindowHints()

关于java - LWJGL:glfwCreateWindow 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929736/

相关文章:

java - 在没有 OnCreate 的类中 addPreferencesFromResource

java - OpenGL 深度缓冲区困惑

android - OpenGL ES单像素绘图android

java - 无法将 setOnClickListener 添加到抽屉导航中的按钮

java - 使用自签名证书生成签名

java - 文本文件内容更改事件

java - 迁移到Ipv6,如何强制使用特定范围?

java - 有纹理的三角形,仅渲染一种颜色

java - 如何在 LWJGL 中渲染 3d 立方体?

java - 计算法线