Login  Register

Animator : SWTException: Invalid thread access on thread main-Animator

Posted by PsyKo on Sep 09, 2014; 5:28pm
URL: https://forum.jogamp.org/Animator-SWTException-Invalid-thread-access-on-thread-main-Animator-tp4033104.html

Hello

I'm designing and Eclipse e4 application and I use SWT GLCanvas (com.jogamp.opengl.swt.GLCanvas)

When adding an animator to it, I do have the following exception:

Exception in thread "main-Animator" com.jogamp.opengl.util.AnimatorBase$UncaughtAnimatorException: javax.media.opengl.GLException: Caught SWTException: Invalid thread access on thread main-Animator
        at com.jogamp.opengl.util.DefaultAnimatorImpl.display(DefaultAnimatorImpl.java:61)
        at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:446)
        at com.jogamp.opengl.util.Animator$MainLoop.run(Animator.java:198)
        at java.lang.Thread.run(Unknown Source)
Caused by: javax.media.opengl.GLException: Caught SWTException: Invalid thread access on thread main-Animator
        at javax.media.opengl.GLException.newGLException(GLException.java:75)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1317)
        at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1137)
        at com.jogamp.opengl.swt.GLCanvas$3.run(GLCanvas.java:171)
        at com.jogamp.opengl.swt.GLCanvas.runInGLThread(GLCanvas.java:959)
        at com.jogamp.opengl.swt.GLCanvas.display(GLCanvas.java:658)
        at com.jogamp.opengl.util.DefaultAnimatorImpl.display(DefaultAnimatorImpl.java:54)
        ... 3 more
Caused by: org.eclipse.swt.SWTException: Invalid thread access
        at org.eclipse.swt.SWT.error(SWT.java:4441)
        at org.eclipse.swt.SWT.error(SWT.java:4356)
        at org.eclipse.swt.SWT.error(SWT.java:4327)
        at org.eclipse.swt.widgets.Widget.error(Widget.java:476)
        at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:367)
        at org.eclipse.swt.widgets.Control.addMouseListener(Control.java:343)
        at org.goko.gcode.viewer.camera.PerspectiveCamera.<init>(PerspectiveCamera.java:53)
        at org.goko.viewer.jogl.service.JoglViewerServiceImpl.initialise(JoglViewerServiceImpl.java:121)
        at org.goko.viewer.jogl.GokoJoglCanvas.init(GokoJoglCanvas.java:146)
        at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:638)
        at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:660)
        at com.jogamp.opengl.swt.GLCanvas$1.run(GLCanvas.java:143)
        at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1281)
        ... 8 more


I guess this is related to the SWT EDT, right ?
Am I missing something ?

I managed to update the view by calling the redraw() method from org.eclipse.swt.widgets (from my mouse listener for instance) but this is not the best thing to do I guess.

I won't post the source until it's necessary (quite a few class) but basically I'm using the following :

public class MyJoglCanvas extends GLCanvas implements GLEventListener{ ... }

And I'm attaching the Animator as such :

Animator animator = new Animator();
animator.add(myJoglCanvasInstance);
animator.start();

Thanks in advance for your help.