There is a DeadLock in JOGL.
The reshape() Methode may be called with the AWT-TreeLock held. Than reshape calls invokeGL, which is synchronized and therefor obtains a new lock.
When a AnimatorThread is used, the invokeGL-method is called directly, but at least the Windows implementation of JOGL call some AWT-Methods (getDeviceConfiguration or something like that) which try to obtain the AWT-TreeLock.
Et voilà: a deadlock.
You seem to use a strategy that i’d call “maximum locking” in the invokeGL-Method. You should only use synchronized in the invokeGL-Method to test for the deferred actions. You can copy the deferred actions into local variables, and then release the lock. In short: the methode invokeGL should not be synchronized, but instead make minimal use of synchronized(this) {}.
Thx
Sven