Java LWJGL/OpenGL实现导致NullPointerException错误
(这是我的全部代码) 首先,我使用本教程中的代码(githubrepo:)。我一步一步地写这段代码,但我坚持。。。运行它(多么可笑,我只创建了主文件)。重要的是,我在MacOSX10.10.3上使用Eclipse。OFC我已经添加了所有LWJGL库。这是我每次(fu…)运行代码时遇到的控制台错误:Java LWJGL/OpenGL实现导致NullPointerException错误,java,eclipse,opengl,lwjgl,Java,Eclipse,Opengl,Lwjgl,(这是我的全部代码) 首先,我使用本教程中的代码(githubrepo:)。我一步一步地写这段代码,但我坚持。。。运行它(多么可笑,我只创建了主文件)。重要的是,我在MacOSX10.10.3上使用Eclipse。OFC我已经添加了所有LWJGL库。这是我每次(fu…)运行代码时遇到的控制台错误: package com.flappygame.flappy; import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.opengl.
package com.flappygame.flappy;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL13.*;
import static org.lwjgl.system.MemoryUtil.*;
import java.nio.ByteBuffer;
import org.lwjgl.glfw.GLFWvidmode;
import org.lwjgl.opengl.GLContext;
public class Main implements Runnable {
private int width = 1280;
private int height = 720;
private Thread thread;
private boolean running = false;
private long window;
public void start() {
running = true;
thread = new Thread(this, "Game");
thread.start();
}
private void init() {
if (glfwInit() != GL_TRUE) {
System.err.println("Could not initialize GLFW!");
return;
}
//glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
//glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
window = glfwCreateWindow(width, height, "Flappy", NULL, NULL);
if (window == NULL) {
System.err.println("Could not create GLFW window!");
return;
}
ByteBuffer vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window, (GLFWvidmode.width(vidmode) - width) / 2, (GLFWvidmode.height(vidmode) - height) / 2);
glfwMakeContextCurrent(window);
glfwShowWindow(window);
//System.out.println("OpenGL version: " + glGetString(GL_VERSION));
}
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();
}
}
这里怎么了?
我对OpenGL版本(注释行)有问题。可能是因为这个原因吧?消息“无法创建GLFW窗口!”非常清楚地说明了发生了什么。您没有获得GLFW窗口,但在本例中您没有中止程序,并继续使用render()
函数,将NULL
馈送到glfWindowShouldClose()
您确实应该删除
glfwWindowHint(GLFW\u OPENGL\u FORWARD\u COMPAT,GL\u TRUE)代码>如果您不打算请求某些>=3.2核心概要文件上下文。但是尝试请求GL4.4上下文在OSX上也不起作用。当我删除glfwWindowHint(GLFW\u OPENGL\u FORWARD\u COMPAT,GL\u TRUE)时,使用操作系统实际支持的东西。
我在控制台中只能看到一堵红色的错误墙,类似于:***+[NSUndoManager\u endTopLevelGroupings],/SourceCache/Foundation/Foundation-1153.20/Misc.subproj/NSUndoManager.m:340
java[3925:2167638]+[NSUndoManager(NSInternal)\u endTopLevelGroupings]只有在主线程上调用才安全。
这是一个全新的问题,与OpenGL完全无关。我认为它与OpenGL相关,但与Java无关。也许是关于Eclipse配置的问题?我正在使用最新的JDK和LWJGL版本。在苹果的网站上,我可以在支持OpenGL 4.1的列表中找到我的Macbook。事实上,在兼容性配置文件上,我有版本2.1,在核心配置文件4.1。我如何切换它,或者。。。我不。这就是我需要帮助的原因。我是Java/Eclipse的新手。我没想到会在环境层面出现问题。这和GL一点关系都没有。您得到的错误消息是OSX的API之一。简单的解决方案似乎是在主线程中进行事件处理,正如错误消息实际上所建议的那样(我也看不出创建单独线程的任何原因)。然而,我不是OSX方面的专家,你真的应该为此提出一个新问题。
Could not create GLFW window!
Exception in thread "Game" java.lang.NullPointerException
at org.lwjgl.system.Checks.checkPointer(Checks.java:66)
at org.lwjgl.glfw.GLFW.glfwSwapBuffers(GLFW.java:2578)
at com.radnok.flappy.Main.render(Main.java:74)
at com.radnok.flappy.Main.run(Main.java:60)
at java.lang.Thread.run(Thread.java:745)