As shown below, the concurrent access of GLStateTracker while being cleared by GLContext.destroy() causes a NPE. GLContext.destroy() shall disable it first, then clear it. The state stack pop method shall also swap the mapping with a most atomic action. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at com.sun.opengl.impl.GLStateTracker.getInt(GLStateTracker.java:94) at com.sun.opengl.impl.gl2.GL2Impl.glGetIntegerv(GL2Impl.java:6102) at com.sun.opengl.impl.gl2.GL2Impl.imageSizeInBytes(GL2Impl.java:26000) at com.sun.opengl.impl.gl2.GL2Impl.imageSizeInBytes(GL2Impl.java:25713) at com.sun.opengl.impl.gl2.GL2Impl.glTexImage2D(GL2Impl.java:18692) at glredbook1314.combiner.init(combiner.java:104) at com.sun.opengl.impl.GLDrawableHelper.init(GLDrawableHelper.java:88) at javax.media.opengl.awt.GLJPanel$Updater.init(GLJPanel.java:557) at com.sun.opengl.impl.GLDrawableHelper.init(GLDrawableHelper.java:88) at com.sun.opengl.impl.GLPbufferImpl$InitAction.run(GLPbufferImpl.java:274) at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:149) at com.sun.opengl.impl.GLPbufferImpl.maybeDoSingleThreadedWorkaround(GLPbufferImpl.java:267) at com.sun.opengl.impl.GLPbufferImpl.swapBuffers(GLPbufferImpl.java:157) at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:159) at javax.media.opengl.awt.GLJPanel.dispose(GLJPanel.java:238) [junit] Testsuite: com.jogamp.opengl.test.junit.texture.awt.Texture1 [junit] Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException [junit] at com.sun.opengl.impl.GLStateTracker.getInt(GLStateTracker.java:94) [junit] at com.sun.opengl.impl.gl2.GL2Impl.glGetIntegerv(GL2Impl.java:6102) [junit] at com.sun.opengl.impl.gl2.GL2Impl.imageSizeInBytes(GL2Impl.java:26000) [junit] at com.sun.opengl.impl.gl2.GL2Impl.imageSizeInBytes(GL2Impl.java:25713) [junit] at com.sun.opengl.impl.gl2.GL2Impl.glTexImage2D(GL2Impl.java:18692) [junit] at com.sun.opengl.util.texture.Texture.updateImage(Texture.java:646) [junit] at com.sun.opengl.util.texture.Texture.updateImage(Texture.java:421) [junit] at com.sun.opengl.util.texture.Texture.<init>(Texture.java:183) [junit] at com.sun.opengl.util.texture.TextureIO.newTexture(TextureIO.java:394) [junit] at com.jogamp.opengl.test.junit.texture.util.gl2.TextureGL2ListenerDraw1.init(TextureGL2ListenerDraw1.java:56) [junit] at com.sun.opengl.impl.GLDrawableHelper.init(GLDrawableHelper.java:88) [junit] at javax.media.opengl.awt.GLCanvas$InitAction.run(GLCanvas.java:603) [junit] at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:149) [junit] at javax.media.opengl.awt.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:553) [junit] at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:290)
Solved as described ..