Mac系统下LWJGL调用glfwCreateWindow卡住无法运行问题求助
Mac系统LWJGL调用glfwCreateWindow卡住解决方案
你的代码存在2个直接触发问题的错误,同时缺少Mac平台专属的GLFW配置和JVM启动要求,按以下步骤修改即可解决:
- 重复调用
glfwInit():你在初始化判断逻辑中已经调用过一次glfwInit(),后续又额外触发了一次初始化,会导致GLFW状态异常,直接删除多余的第二次glfwInit()即可。 - 缺少Mac平台强制要求的OpenGL兼容配置:Mac系统对OpenGL 3.3及以上版本有强制适配要求,必须额外添加两个窗口配置项,否则会出现窗口创建失败、卡住的问题。
- 缺少Mac专属JVM启动参数:Mac要求所有UI相关操作必须运行在首线程,未添加对应参数时GLFW的窗口调用会直接卡住。
修改后的init方法代码
private void init() { if(!glfwInit()) { System.err.println("ERROR: can't initialize GLFW"); // 初始化失败直接抛出异常终止运行,避免后续空操作 throw new IllegalStateException("Unable to initialize GLFW"); } glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // 新增Mac平台必须的两个OpenGL兼容配置 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); windowID = glfwCreateWindow(800, 600, "Window", 0, 0); // 新增窗口创建失败判断,避免后续操作空指针 if (windowID == 0) { throw new RuntimeException("Failed to create GLFW window"); } glfwMakeContextCurrent(windowID); GL.createCapabilities(); glfwShowWindow(windowID); }
启动参数配置
运行程序前需要在VM选项中添加如下参数:-XstartOnFirstThread
如果你使用IDEA,配置路径为:运行配置 -> 修改选项 -> 添加VM选项,把上述参数填入即可;其他开发工具可在对应启动配置的VM参数栏添加。
内容的提问来源于stack exchange,提问作者Secu7or
相关产品推荐
相关产品推荐

