JOGL로 게임을 만들고 있는데 내 인생에서 할 수없는 오류가 발생했습니다. 알아 낸다.JOGL : javax.media.opengl.GLException : AWT-EventQueue-0 : 컨텍스트가 현재 스레드가 아닙니다.
게임에서 나는 메뉴와 실제 게임을위한 두 개의 GLCanvases (실제로 GLJpanels)를 사용하고 있습니다. 메뉴에서 게임을 시작하면 메뉴 GLCanvas가 gamewindow에서 제거되고 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?
그러나 거기에 게시 된 솔루션 중 아무 것도 나를 위해 일하지 않았습니다.
답변을 주셔서 감사합니다. 몇 가지 예를 살펴보고 실패 할 경우 포럼에 올 것입니다. 나는 GLCanvas 대신 GLJPanel을 사용한 이유는 GLCanvas가 JFrame으로 잘 돌아 가지 않았기 때문이라고 생각합니다. 이 일에 대해 아는 것이 있습니까? 또한, init() 함수 내에서 GLAutoDrawable.invoke()를 정확히 사용 하시겠습니까? – user1870238
당신을 진심으로 환영합니다. AWT (중량급)와 Swing (경량) 구성 요소를 혼합하는 것은 Java 1.6 업데이트 10부터 잘 지원되어야하지만 여전히 문제가있는 경우가 있으며 특히 JOGL과 관련이없는 경우가 있습니다. 그것은 JFrame에서 실제로하는 일에 달려 있습니다. 하나의 JPanel을 JFrame에 넣고 GLCanvas 또는 NewtCanvasAWT를이 JPanel에 넣으면 작동합니다. 가능한 경우 GLWindow를 사용하십시오. – gouessej