LWJGL:glfwCreateWindow返回null [英] LWJGL: glfwCreateWindow return null

查看:482
本文介绍了LWJGL:glfwCreateWindow返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在看Java尝试使用Java编写LWJGL库,但是创建窗口后,我将返回null.

I was trying LWJGL library in Java seeing the tutorial, but the creation of the window I will return 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)

我该如何解决?感谢任何试图帮助我的人.

How can I fix? Thanks to anyone trying to help me.

推荐答案

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

My first attempt would be to simplify the program by removing the Thread, since LWJGL sometime has problems calling methods from outside the main thread. The second attempt would be to remove the glfwWindowHint(...) methods and instead call glfwDefaultWindowHints()

这篇关于LWJGL:glfwCreateWindow返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆