JOGL Webstart Problem

I tried to add webstart support to my project template, but I seem to be unable to get this working:

Stacktrace:


java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
	at javax.media.opengl.GLCanvas.<clinit>(GLCanvas.java:63)
	at org.yourorghere.SimpleJOGL2.main(SimpleJOGL2.java:22)
	... 9 more
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission jogl.verbose read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at com.sun.opengl.impl.Debug$2.run(Debug.java:75)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.opengl.impl.Debug.isPropertyDefined(Debug.java:73)
	at com.sun.opengl.impl.Debug.<clinit>(Debug.java:52)
	... 11 more

JNLP File:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc.//DTD JNLP 1.5//EN" "http://www.netbeans.org/jnlp/DTD/jnlp.dtd">
<jnlp codebase="file:///D:/development/projects/temp/SimpleJOGL2" href="SimpleJOGL2.jnlp">
  <information>
    <title>SimpleJOGL2</title>
    <vendor>Company, Inc.</vendor>
    <homepage href="homepage.html"/>
    <description> </description>
    <icon href="default"/>
    <offline-allowed/>
    <shortcut online="true"/>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se href="http://java.sun.com/products/autodl/j2se" version="1.4+"/>
    <property name="sun.java2d.noddraw" value="true"/>
    <jar href="dist/SimpleJOGL2.jar" main="true"/>
    <extension href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp" name="jogl"/>
  </resources>
  <application-desc main-class="org.yourorghere.SimpleJOGL2"/>
</jnlp>

Code is


public class SimpleJOGL2 implements GLEventListener
{
	public static void main(String[] args)
	{
		Frame frame = new Frame("Simple JOGL Application");
		GLCanvas canvas = new GLCanvas();
		
		canvas.addGLEventListener(new SimpleJOGL2());
		frame.add(canvas);
		frame.setSize(640, 480);
		final Animator animator = new Animator(canvas);
		frame.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				// Run this on another thread than the AWT event queue to
				// make sure the call to Animator.stop() completes before
				// exiting
				new Thread(new Runnable()
				{
					public void run()
					{
						animator.stop();
						System.exit(0);
					}
				}).start();
			}
		});
		// Center frame
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		animator.start();
	}
	
	public void init(GLAutoDrawable drawable)
	{
		// Use debug pipeline
		// drawable.setGL(new DebugGL(drawable.getGL()));
		
		GL gl = drawable.getGL();
		System.err.println("INIT GL IS: " + gl.getClass().getName());
		
		// Enable VSync
		gl.setSwapInterval(1);
		
		// Setup the drawing area and shading mode
		gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
		gl.glShadeModel(GL.GL_SMOOTH); // try setting this to GL_FLAT and see what happens.
	}
	
	public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height)
	{
		GL gl = drawable.getGL();
		GLU glu = new GLU();

		if (height <= 0) // avoid a divide by zero error!
				height = 1;
		final float h = (float) width / (float) height;
		gl.glViewport(0, 0, width, height);
		gl.glMatrixMode(GL.GL_PROJECTION);
		gl.glLoadIdentity();
		glu.gluPerspective(45.0f, h, 1.0, 20.0);
		gl.glMatrixMode(GL.GL_MODELVIEW);
		gl.glLoadIdentity();
	}
	
	public void display(GLAutoDrawable drawable)
	{
		GL gl = drawable.getGL();
		
		// Clear the drawing area
		gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
		// Reset the current matrix to the "identity"
		gl.glLoadIdentity();
		
		// Move the "drawing cursor" around
		gl.glTranslatef(-1.5f, 0.0f, -6.0f);

		// Drawing Using Triangles
		gl.glBegin(GL.GL_TRIANGLES);		    
			gl.glColor3f(1.0f, 0.0f, 0.0f);    // Set the current drawing color to red
			gl.glVertex3f(0.0f, 1.0f, 0.0f);   // Top
			gl.glColor3f(0.0f, 1.0f, 0.0f);    // Set the current drawing color to green
			gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
			gl.glColor3f(0.0f, 0.0f, 1.0f);    // Set the current drawing color to blue
			gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
		// Finished Drawing The Triangle
		gl.glEnd();
		
		// Move the "drawing cursor" to another position
		gl.glTranslatef(3.0f, 0.0f, 0.0f);
		// Draw A Quad
		gl.glBegin(GL.GL_QUADS);
			gl.glColor3f(0.5f, 0.5f, 1.0f);    // Set the current drawing color to light blue
			gl.glVertex3f(-1.0f, 1.0f, 0.0f);  // Top Left
			gl.glVertex3f(1.0f, 1.0f, 0.0f);   // Top Right
			gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
			gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
		// Done Drawing The Quad
		gl.glEnd();
		
		// Flush all drawing operations to the graphics card
		gl.glFlush();
	}
	
	public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged)
	{}
}

Java Version is 1.6 on Windows XP.

I even signed my jar, although it should not be necessary (it’s merely a Gears.java copy) The Gears.jnlp from the demo page had no problem at all.

Any ideas?

Did you use the jogl.jar out of the JOGL web start binaries? The one that ships in the developers’ zip archives aren’t signed.

I specified jogl as an extension in the jnlp file:


    <extension href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp" name="jogl"/>

Is there any way the locally downloaded jogl used for compiling can intrerfere with that? I don’t have jogl in my global classpath or anywhere in my JRE/JDK lib directories and strangely enough the problem stays the same, if I start it by double click in explorer, while the downloaded Gears.jnlp starts fine by double click.

Found it.

The application-jar contained a classpath-extension that pointed to a locally installed jogl.jar. I never thought webstart might take this into account and even if, that this setting overrides the jnlp descriptor.