Java 尚未为当前线程设置GLCapabilities实例

Java 尚未为当前线程设置GLCapabilities实例,java,opengl,lwjgl,Java,Opengl,Lwjgl,我一直在尝试OpenGL,遵循ThinMatrix的教程。唯一不同的是他用的是lwjgl 2,我用的是lwjgl 3。我认为这将是一个很好的挑战,事实证明确实如此。上面说没有设置任何功能,但我很确定我已经设置了它们 基本上我得到的全部错误是 Exception in thread "main" java.lang.IllegalStateException: No GLCapabilities instance has been set for the current thread. at or

我一直在尝试OpenGL,遵循ThinMatrix的教程。唯一不同的是他用的是lwjgl 2,我用的是lwjgl 3。我认为这将是一个很好的挑战,事实证明确实如此。上面说没有设置任何功能,但我很确定我已经设置了它们

基本上我得到的全部错误是

Exception in thread "main" java.lang.IllegalStateException: No GLCapabilities instance has been set for the current thread.
at org.lwjgl.opengl.GL.getCapabilities(GL.java:211)
at org.lwjgl.opengl.GL20.getInstance(GL20.java:378)
at org.lwjgl.opengl.GL20.glCreateShader(GL20.java:464)
at net.robharding.base.shaders.ShaderProgram.loadShader(ShaderProgram.java:67)
at net.robharding.base.shaders.ShaderProgram.<init>(ShaderProgram.java:17)
at net.robharding.base.shaders.StaticShader.<init>(StaticShader.java:9)
at net.robharding.base.engine.Display.init(Display.java:77)
at net.robharding.base.engine.Display.<init>(Display.java:31)
at net.robharding.base.MainComponent.main(MainComponent.java:8)
这是它要追溯到的方法

    private static int loadShader(String file, int type) {
    StringBuilder shaderSource = new StringBuilder();
    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line;
        while((line = reader.readLine()) != null) {
            shaderSource.append(line).append("\n");
        }
        reader.close();
    } catch(IOException e) {
        System.err.print("Count not read file!");
        e.printStackTrace();
        System.exit(-1);
    }

    int shaderID = GL20.glCreateShader(type);
    GL20.glShaderSource(shaderID, shaderSource);
    GL20.glCompileShader(shaderID);
    if(GL20.glGetShaderi(shaderID,  GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
        System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
        System.err.println("Could not compile shader!");
        System.exit(-1);
    }
    return shaderID;
}

在创建上下文之前,代码尝试使用OpenGL

在构造函数中调用创建着色器的
init
方法,但在
run
方法的开头创建上下文。要解决此问题,请将
init
方法的调用移动到
GL.createCapabilities()之后的
run
方法


还请注意,OpenGL上下文始终只与一个线程关联。所以所有OpenGL命令都必须从这一个线程发出。

我真傻。修正:D谢谢
    private static int loadShader(String file, int type) {
    StringBuilder shaderSource = new StringBuilder();
    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line;
        while((line = reader.readLine()) != null) {
            shaderSource.append(line).append("\n");
        }
        reader.close();
    } catch(IOException e) {
        System.err.print("Count not read file!");
        e.printStackTrace();
        System.exit(-1);
    }

    int shaderID = GL20.glCreateShader(type);
    GL20.glShaderSource(shaderID, shaderSource);
    GL20.glCompileShader(shaderID);
    if(GL20.glGetShaderi(shaderID,  GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
        System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
        System.err.println("Could not compile shader!");
        System.exit(-1);
    }
    return shaderID;
}