我正在尝试用 jPCT 制作一个小程序。使用 jPCT 需要将 jPCT jar 添加到类路径中。我以为我有它,但我仍然得到一个关于 jPCT 类之一的类未找到异常。
我的命令:
$ javac -classpath /var/www/html/jpct.jar:. /var/www/html/HelloWorld.java
$ jar cf /var/www/html/HelloWorld.jar /var/www/html/HelloWorld.class
我的 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>
我正在使用 Apache,并且我已经验证我的 jar 可以从我的代码中的 URL 下载。
确切的错误信息:
$ 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)
我究竟做错了什么?