我的类路径有什么问题吗?
我正在尝试用 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)
我做错了什么?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须将依赖项放在为 Applet
.jar
文件提供服务的同一 Web 服务器上,并给出绝对位置或相对于 Applet 根上下文的位置。并且您必须从 Web 服务器而不是文件系统将 Applet 加载到 Web 浏览器中。
这里是相关阅读材料。
ARCHIVE = archiveList
如果您的小程序位于
/var/www/html/Applet.jar
那么最简单的方法是将您的依赖项放在完全相同的位置/ var/www/html/jcpt.jar
然后你就可以引用它,而不必担心计算相对路径。示例
You have to put your dependencies on the same web server that is serving the Applet
.jar
file 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.jar
then the simplest thing to do is put your dependencies in the exact same location/var/www/html/jcpt.jar
and then you can just refer to it without having to worry about calculating the relative path.Example
你用过Tomcat之类的服务器吗?如果有,您可能需要为其分配 jar 文件的路径或将 jpct.jar 复制到 tomcat/lib/ dir 。
Have you used any server like Tomcat ? If you have, you may need to assign the path of your jar file to it or copy the jpct.jar to the tomcat/lib/ dir .