有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajogl:javax。媒体opengl。GLException:AWTEventQueue0:线程上的上下文不是当前上下文

我正在用JOGL制作一个游戏,我遇到了一个我一生都无法解决的错误

在游戏中,我使用了两个glcanvase(实际上是gljpanel),一个用于菜单,一个用于实际游戏。其思想是,当游戏从菜单启动时,菜单GLCanvas将从游戏窗口中移除,并替换为游戏GLCanvas。到目前为止,我已经让菜单工作得非常完美,但每当我尝试切换到游戏画布时,我都会出现以下错误:

Catched Exception on thread AWT-EventQueue-0
javax.media.opengl.GLException: AWT-EventQueue-0: Context not current on thread, obj 0x2ab44e2d, ctx 0x0, surf 0x0, inDestruction: false, <53f7c06e, 2e7aa0d3>[count 0, qsz 0, owner <NULL>]

我用来在画布之间切换的代码是:

public void start()
{
    canvas.addGLEventListener(this);
    animator.start();
    window.add(canvas);
    canvas.requestFocus();
}
public void stop()
{
    window.remove(canvas);
    animator.stop();
    canvas.removeGLEventListener(this);
}

和开关功能:

public void switchToCanvas(String canvasName)
{
    currentCanvas = canvasName;

    if(canvasName.equals("GameCanvas"))
    {
        menu.stop();
        game.start();
    }
    else
    {
        game.stop();
        menu.start();
    }
}

我在谷歌上搜索了一下,发现了这个问题:How can I create my own openGL context and bind it to a GLCanvas?

但是上面贴的所有解决方案都不适合我


共 (1) 个答案

  1. # 1 楼答案

    首先,我宁愿使用一个GLCanvas,而不是两个GLJPanel实例。GLJPanel的内存占用更大,只有在无法使用GLWindow或AWT/SWT GLCanvas时,以及在混合使用重量级和轻量级组件时出现问题时,才应使用GLJPanel

    其次,错误消息意味着该线程上没有当前的OpenGL上下文。你应该使用GLAutoDrawable。invoke()将OpenGL任务放入队列,或者在需要时将上下文设置为当前上下文。我建议大家看看jogl演示,看看我们在示例中是如何做到这一点的

    编辑:包括我在内的JogAmp维护人员可以在官方论坛(http://forum.jogamp.org/)和IRC上轻松联系