(I’m using JOGL 2.0b10)
In all the environments I ran this in, OpenGL rendering happens in the first frame only. The second one stays black. Looking at the code, this seems quite logical: When the line
GLCanvas canvas2 = new GLCanvas(null, null, canvas1.getContext(), null);
is executed, canvas1.getContext() is null, so no actual context sharing takes place. In fact, it seems very plausible that canvas1.getContext() must be null at that point, since this code runs before the AWT event loop is even started, and before canvas1’s GLEventListener#init() method runs. According to the documentation, said init method is called immediately after the GLContext has been (re)created, so this would be the earliest time where it would make sense to create canvas2 with canvas1’s context.
If I replace the GLCanvases with GLJPanels, the demo works, but I guess that is just a coincidence (display list ids “accidentally” being the same in both contexts).