线程“main”中的异常java.lang.RuntimeException:找不到OpenGL上下文

时间:2013-04-27 07:06:04

标签: java opengl lwjgl

我最近开始使用lwjgl并没有遇到任何问题。昨天我去创建一个新窗口(我已经完成了至少十几次,如果不是更多的话),当我运行它时它会出现这些错误

Exception in thread "main" java.lang.RuntimeException: No OpenGL context found in the current thread.
    at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
    at org.lwjgl.opengl.GL11.glMatrixMode(GL11.java:2051)
    at Main.initGL(Main.java:10)
    at Main.main(Main.java:34)

我的代码是

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import static org.lwjgl.opengl.GL11.*;

public class Main
{
    public static void initGL()
    {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 640, 480, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);
    }

    public static void initDisplay()
    {
        try 
        {
            Display.setDisplayMode(new DisplayMode(480, 600));
            Display.setTitle("Texture Demo");
            Display.create();
        }

        catch (LWJGLException e) 
        {
            e.printStackTrace();
        }
        Display.update();
    }

    public static void main(String[] args)
    {
        initGL();
        initDisplay();
    }
}

我看不到任何错误,就像我说的那样,我之前运行过这段代码。

3 个答案:

答案 0 :(得分:3)

initGLinitDisplay是错误的。

GL需要一个上下文才能开始调用GL函数,因此initDisplay()然后initGL()

答案 1 :(得分:1)

我最近在制作游戏时遇到过这个问题。 OpenGL初始化需要在显示创建之后。此外,您必须不断更新您的显示器,否则它将立即关闭创建。这里有一个例子:

    public void run() {
        while(!Display.isCloseRequested) {
            Display.update()
            // Add repainting and input here
        }
    }   

在“main”方法中添加“run”方法

答案 2 :(得分:0)

如果更改初始状态,它将起作用。所以首先你必须做initDisplay()因为矩阵不会找到OpenGL的显示。