I’m trying to make an applet with jPCT. Using jPCT requires that the jPCT jar be added to the classpath. I thought I had it, but I’m still getting a class not found exception about one of jPCT’s classes.
My commands:
$ javac -classpath /var/www/html/jpct.jar:. /var/www/html/HelloWorld.java
$ jar cf /var/www/html/HelloWorld.jar /var/www/html/HelloWorld.class
My HTML:
<html>
<head>
<title>Hello World</title>
</head>
<body>
<applet code="HelloWorld"
width=640
height=480
archive="http://applet/HelloWorld.jar,http://applet/jpct.jar">
</applet>
</body>
</html>
I’m using Apache and I have verified that my jars are downloadable from the URLs in my code.
The exact error message:
$ firefox http://applet/HelloWorld.html
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1~11.04.1)
OpenJDK Server VM (build 20.0-b11, mixed mode)
(firefox-bin:15296): LIBDBUSMENU-GTK-CRITICAL **: dbusmenu_menuitem_property_set_shortcut: assertion `gtk_accelerator_valid(key, modifier)' failed
Unable to use Firefox's proxy settings. Using "DIRECT" as proxy type.
java.lang.NoClassDefFoundError: com/threed/jpct/World
at HelloWorld.init(HelloWorld.java:18)
at sun.applet.AppletPanel.run(AppletPanel.java:436)
at net.sourceforge.jnlp.NetxPanel.run(NetxPanel.java:69)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.ClassNotFoundException: com.threed.jpct.World
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at net.sourceforge.jnlp.runtime.JNLPClassLoader$CodeBaseClassLoader.findClass(JNLPClassLoader.java:1348)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 4 more
Exception in thread "TimerQueue" java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:155)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1262)
at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:459)
at java.util.concurrent.DelayQueue.take(DelayQueue.java:205)
at javax.swing.TimerQueue.run(TimerQueue.java:167)
at java.lang.Thread.run(Thread.java:679)
What am I doing wrong?
You have to put your dependencies on the same web server that is serving the Applet
.jarfile and give the locations either absolutely or relative to the root context of the Applet.And you have to load your Applet into your web browser from the web server, not from the file system.
Here is the relevant reading materials.
ARCHIVE = archiveList
if your applet is at
/var/www/html/Applet.jarthen the simplest thing to do is put your dependencies in the exact same location/var/www/html/jcpt.jarand then you can just refer to it without having to worry about calculating the relative path.Example