でラップされた2 つのJOGLネイティブがあります。GLWindow
NewtCanvasAWT
これらのキャンバスはそれぞれ に追加されJInternalFrame
ます。JInternalFrame
が追加されJDesktopPane
、 が に追加されJFrame
ます。
シーンが変わると手動で呼び出されるAnimator
ため、実行していません。.display()
このセットアップは、次の 1 つのことを除けば、期待どおりに機能します。
2 番目
JInternalFrame
(作成の順序) が 1 番目を超えると、最初は再描画されません。1 番目が 2 番目の上に移動すると、期待どおり、2 番目が再描画されます。
さらにフレームを追加すると、最後のフレームだけが期待どおりに動作します。
はJInternalFrames
同一です (同じクラス)。
最初は受信しGLWindow
ません。2番目のものはそうです。WindowUpdateEvent
WindowListener.windowRepaint()
作業中の私のスタックトレースはGLEventListener.display(GLAutoDrawable drawable)
次のとおりです。 JInternalFrame
java.lang.IllegalArgumentException: test
at edu.agh.tunev.ui.opengl.Scene.display(Scene.java:42)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:373)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:358)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:280)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:655)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:594)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:543)
at jogamp.opengl.GLAutoDrawableBase.defaultWindowRepaintOp(GLAutoDrawableBase.java:99)
at com.jogamp.newt.opengl.GLWindow.access$000(GLWindow.java:94)
at com.jogamp.newt.opengl.GLWindow$1.windowRepaint(GLWindow.java:107)
at jogamp.newt.WindowImpl.consumeWindowEvent(WindowImpl.java:2392)
at jogamp.newt.WindowImpl.consumeEvent(WindowImpl.java:1943)
at jogamp.newt.DisplayImpl.dispatchMessage(DisplayImpl.java:388)
at jogamp.newt.DisplayImpl.dispatchMessages(DisplayImpl.java:436)
at jogamp.newt.DisplayImpl$DispatchMessagesRunnable.run(DisplayImpl.java:371)
at jogamp.newt.DefaultEDTUtil$EventDispatchThread.run(DefaultEDTUtil.java:293)
これは、最初のフレームでも発生するはずです。なぜそうしないのですか?
GLJPanel
またはを使用する場合、これはすべて発生しませんGLCanvas
。ただし、レンダリングに AWT スレッドを使用したくありませんGLAutoDrawable
。NEWT
ネイティブ ウィンドウ ツールキットは別のスレッドを使用します。