I have a solution that works for many applications.. a JNLP Loader @ http://code.google.com/p/jnlp-loader
The idea is to package the application main JNLP with the loader code into a JAR.
Running the JAR unpacks the application described by the JNLP and then runs it.
There's a couple issues with this approach. First, it's insecure, like any executable native code. Second, it's purposefully not using any graphics because I'm using it with NEWT and don't want to load AWT.
This second point can be dealt with if there's any demand for it -- AWT applications can let jnlp-loader use AWT, and non-AWT users can use it as is with the long wait for unpacking to complete and then use AWT for any errors. Another, third issue is that it's currently not detecting java runtime version and doing anything with that. The present version is simply compiled for 1.5, and proceeds to run the application if it can.
I think the best use of this approach is in development, or for applications in the neighborhood of the technically inclined (and patient). I mean, applications using this as is want to tell folks that it requires java 1.5 and runs silently until the downloading and unpacking completes, which can be a minute or two on a fast connection.
I have a JOGL/NEWT Gears demo @ http://fv3tk.googlecode.com/svn/web/fv3tk-gears-loader-0.0.1.jar