Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Lazy applet JAR downloading using JNLP - Part II

42 views
Skip to first unread message

Qu0ll

unread,
Aug 17, 2009, 12:17:33 AM8/17/09
to
I promised Andrew Thompson I would report back as to my progress getting
this to work and so here I am.

I can report that the progress has been good and also baffling. It is good
to the extent that I have been able to implement lazy JAR downloading for an
applet launched from JNLP using DownloadService in a way that works very
well but baffling in the sense that it only works on Windows and even then
only in some browsers.

The environments which work are:

Firefox 3.5.2 on Windows Vista
Firefox 3.0.13 on Windows Server 2003
IE 8 on Windows Vista
IE 8 on Windows Server 2003
Chrome 3.0.195.6 on Windows Vista

The environments that don't work are:

Opera 9.64 on Windows Vista
Safari 4.0.2 on Windows Vista
Firefox 3.0.11 on Solaris x86 10
Firefox 3.0.13 on Ubuntu 8.10

In all cases where the applet is failing, the exception I am getting is
this:

java.lang.NoClassDefFoundError: javax/jnlp/DownloadServiceListener
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException:
javax.jnlp.DownloadServiceListener
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 10 more

I get a similar ClassNotFoundException for
javax/jnlp/UnavailableServiceException if I try to use this exception class
to detect if the DownloadService is available.

So, how can this be when all environments are using the exact same version
of Java (6u16)? It appears that in some browsers on some operating systems
the JNLP services are not fully implemented or not available at all. Now, I
have a suspicion that browsers like Opera still use the old "Plugin1"
functionality instead of the new "Plugin2" functionality even though a
recent JRE is in place and I believe that launching an applet using JNLP is
only supported in Plugin2. This would explain the results for Opera and
perhaps Safari but doesn't really explain the results for Firefox on Solaris
and Ubuntu as Firefox 3.x on Windows has supported JNLP launching for some
time.

Does anyone have any thoughts, ideas or suggestions on this?

--
And loving it,

-Qu0ll (Rare, not extinct)
_________________________________________________
Qu0llS...@gmail.com
[Replace the "SixFour" with numbers to email me]

Andrew Thompson

unread,
Aug 17, 2009, 4:39:14 AM8/17/09
to
On Aug 17, 2:17 pm, "Qu0ll" <Qu0llSixF...@gmail.com> wrote:
...
> java.lang.NoClassDefFoundError: javax/jnlp/DownloadServiceListener

That is a definite sign that the plugin2 is
not available for that JRE/browser combo.

There are two approaches you might take.

1) Do like I did in the GIFanim, applet.
<http://pscode.org/gifanim/#applet>
It uses the JNLP services to access the local
file system, it also offers a free-floating
JNLP launch, and it cannot function without
the JNLP services. So in the applet form, I
(hot-link) to Sun's own 'need to upgrade'
applet (CompatibilityApplet.jar), and reference
the applet JNLP via the jnlp_href param. At the
moment on Ubuntu using FF 3.0.13, and Java
1.6.0_10 (32 bit), I see the CompatibilityApplet,
and indeed, have not yet been able to check
the applet form of my GIF animater.

2) With using *just* lazy downloads, it is potentially
easier to supply the applet to both types of
user. Instead of putting the CompatibilityApplet
in the applet element, use the 'standard' form
of the applet that downloads aggressively, but
provide the jnlp form for those with more modern
'plugin2' JREs.

As an aside, why exactly are you using the DS,
or what are you downloading with it? For classes,
I could not see it as being necessary short of
using things like the SPI.

(I still intend finishing that post I was making
to thread 1, I must get back to it sometime..)

It would be nice if Sun provided more information on
which versions of what Java under which OS the 'plugin2'
functionality is supposed to work. At the moment it
is very hit and miss.

--
Andrew T.
pscode.org

Qu0ll

unread,
Aug 17, 2009, 9:24:56 AM8/17/09
to
Hi Andrew,

>> java.lang.NoClassDefFoundError: javax/jnlp/DownloadServiceListener
>
> That is a definite sign that the plugin2 is
> not available for that JRE/browser combo.

Yes, that's what it seems.

> There are two approaches you might take.
>
> 1) Do like I did in the GIFanim, applet.
> <http://pscode.org/gifanim/#applet>
> It uses the JNLP services to access the local
> file system, it also offers a free-floating
> JNLP launch, and it cannot function without
> the JNLP services. So in the applet form, I
> (hot-link) to Sun's own 'need to upgrade'
> applet (CompatibilityApplet.jar), and reference
> the applet JNLP via the jnlp_href param. At the
> moment on Ubuntu using FF 3.0.13, and Java
> 1.6.0_10 (32 bit), I see the CompatibilityApplet,
> and indeed, have not yet been able to check
> the applet form of my GIF animater.

Right.

> 2) With using *just* lazy downloads, it is potentially
> easier to supply the applet to both types of
> user. Instead of putting the CompatibilityApplet
> in the applet element, use the 'standard' form
> of the applet that downloads aggressively, but
> provide the jnlp form for those with more modern
> 'plugin2' JREs.

My applet needs Plugin2 for a number of reasons including use of a few
different JNLP services (not just DownloadService).

> As an aside, why exactly are you using the DS,
> or what are you downloading with it? For classes,
> I could not see it as being necessary short of
> using things like the SPI.

At the moment I am downloading JOGL lazily as not every user of the applet
will interact with it in such a way that JOGL will be required. I also
prefer to have downloading of all applet JARs under my control instead of
the default Java logo with progress bar. I use my own branded animated GIF
to start with as the first (tiny) applet JAR is loaded and then present my
own branded progress bar screen while the other JARs load.

> It would be nice if Sun provided more information on
> which versions of what Java under which OS the 'plugin2'
> functionality is supposed to work. At the moment it
> is very hit and miss.

I agree. In fact I really need to get to the bottom of this as, as I said,
my applet definitely requires Plugin2.

Roedy Green

unread,
Aug 17, 2009, 10:10:56 AM8/17/09
to
On Mon, 17 Aug 2009 23:24:56 +1000, "Qu0ll" <Qu0llS...@gmail.com>
wrote, quoted or indirectly quoted someone who said :

>I agree. In fact I really need to get to the bottom of this as, as I said,
>my applet definitely requires Plugin2.

Use Wassup to dump the System properties.
http://mindprod.com/applet/wassup.html

Any dll you need must live on:

java.library.path = F:\Program Files\Opera 10
Beta;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;E:\Program
Files\jet6.5-pro\bin;E:\Program
Files\Java\jdk1.6.0_16\bin;E:\env;E:\sys\;F:\Program
Files\jpsoft\tcmd10;F:\Program Files\vslick\win;F:\Program
Files\apache-ant-1.7.1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;E:\com\mindprod\reorg;F:\Program
Files\TortoiseSVN\bin;F:\program files\asm;F:\Program Files\Microsoft
Visual Studio 9.0\VC\bin;C:\Program
Files\QuickTime\QTSystem\;F:\Program Files\SlikSvn\bin\;F:\Program
Files\Vslick\win
--
Roedy Green Canadian Mind Products
http://mindprod.com

"If you think it�s expensive to hire a professional to do the job, wait until you hire an amateur."
~ Red Adair (born: 1915-06-18 died: 2004-08-07 at age: 89)

Steve Sobol

unread,
Aug 17, 2009, 6:24:28 PM8/17/09
to
In article <4a88d9de$0$22798$5a62ac22@per-qv1-newsreader-
01.iinet.net.au>, Qu0llS...@gmail.com says...

> In all cases where the applet is failing, the exception I am getting
is
> this:


Check the Java control panel and make sure you're using the right JVM.
At least on Windows, you can select which JVM is used for applets and
which JVM is used for Web Start, if you have more than one JVM
installed.


--
Steve Sobol, Victorville, California, USA
sjs...@JustThe.net

Qu0ll

unread,
Aug 17, 2009, 6:50:36 PM8/17/09
to
"Steve Sobol" <sjs...@JustThe.net> wrote in message
news:MPG.24f3787aa...@news.justthe.net...

> In article <4a88d9de$0$22798$5a62ac22@per-qv1-newsreader-
> 01.iinet.net.au>, Qu0llS...@gmail.com says...
>
>> In all cases where the applet is failing, the exception I am getting
> is
>> this:
>
>
> Check the Java control panel and make sure you're using the right JVM.
> At least on Windows, you can select which JVM is used for applets and
> which JVM is used for Web Start, if you have more than one JVM
> installed.

Unfortunately there's only one JVM/JRE installed on all the machines in
question.

Roedy Green

unread,
Aug 19, 2009, 5:54:46 PM8/19/09
to
On Mon, 17 Aug 2009 15:24:28 -0700, Steve Sobol <sjs...@JustThe.net>

wrote, quoted or indirectly quoted someone who said :

>


>Check the Java control panel and make sure you're using the right JVM.
>At least on Windows, you can select which JVM is used for applets and
>which JVM is used for Web Start, if you have more than one JVM
>installed.

on top of this, you can list your preferred JVMS is order in the JNLP.

You might want to dump out some system properties to the console to
help track what you ended up with.

see http://mindprod.com/applet/wassup.html


--
Roedy Green Canadian Mind Products
http://mindprod.com

http://thecovemovie.com : The Cove: a documentary about Japan's secret atrocities against dolphins.

Roedy Green

unread,
Aug 19, 2009, 5:55:33 PM8/19/09
to
On Tue, 18 Aug 2009 08:50:36 +1000, "Qu0ll" <Qu0llS...@gmail.com>

wrote, quoted or indirectly quoted someone who said :

>Unfortunately there's only one JVM/JRE installed on all the machines in
>question.

Actually, that is good fortune. Multiple JVMs greatly add to the
confusion.

0 new messages