lwjgl3macos创建windows的问题

wsxa1bj1  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(270)

我创建了一些使用lwjgl3的代码,但在使用mac时遇到了macos绑定问题。
问题是,我似乎无法让我的程序创建任何窗口。我知道这是肯定的,因为程序就停在那一点上。没有错误。
代码被卡住的那一行是:

long window = glfwCreateWindow(300, 300, "Hello World!", MemoryUtil.NULL, MemoryUtil.NULL);

由于我是在intellij上开发的,每当我断开进程时,它就会崩溃:

Exception Type: EXC_BAD_ACCESS (SIGABRT) 
Exception Codes: EXC_I386_GPFLT 
Exception Note: EXC_CORPSE_NOTIFY

我觉得这不是问题所在,因为我试着运行另一个依赖于lwjgl3的代码,它也被困在创建窗口的部分。
我知道代码被困在创建窗口的部分,因为我每行都放了print语句。
我真的希望这不是macos big-sur或MacBook pro 2015机型的兼容性问题。
glfwInit() 返回 true ,当我跑的时候 System.out.println(glGetString(GL_VERSION) ); ,我得到这个错误 Fatal error: Thread[main,5,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution. 下面是我用于测试的完整代码:

public static void main(String[] args) throws Exception{
        GLFWErrorCallback.createPrint(System.err).set();

        // Initialize GLFW. Most GLFW functions will not work before doing this.
        if ( !glfwInit() )
            throw new IllegalStateException("Unable to initialize GLFW");

        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);

        // Configure GLFW
        glfwDefaultWindowHints(); // optional, the current window hints are already the default
        glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation
        glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
// Should be true for macOS, according to GLFW docs, to get core profile.
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
// According to Apple docs, non-core profiles are limited to version 2.1.
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
        // Create the window
        long window = glfwCreateWindow(300, 300, "Hello World!", MemoryUtil.NULL, MemoryUtil.NULL);

        //glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

        System.out.println('0');

        glfwDestroyWindow(window);

    }

我在谷歌上搜索了很多次:似乎找不到相关的答案。一个人建议macos有一个隐藏的弹出窗口,必须关闭该窗口才能分配,但我做了一切来禁用它(因为我找不到它),仍然没有发生任何事情。我认为 GL_VERSION 表示opengl如何绑定到java的问题。
[编辑]通过传入jvm选项确保应用程序在主线程上运行 -XstartOnFirstThread .
[编辑2]
离开这个项目几个小时后,我回来重新运行它。我在上面加了一行:

System.out.println("Hello LWJGL " + Version.getVersion() + "!");

这个 createWindow(...) 功能开始工作,这是奇怪的,因为我不知道为什么。它也开始工作,如果我删除了线,所以如果有人知道发生了什么,请让我知道。
我留下的问题没有回答,因为我仍然不知道问题的原因,我只是碰巧是幸运的,它修复了自己。
[编辑3]
我强制在intellij上重建了整个项目,它又停止工作了。我真的很困惑为什么它会在两者之间起作用

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题