Java 我的类路径有什么问题?

Java 我的类路径有什么问题?,java,applet,classpath,jpct,Java,Applet,Classpath,Jpct,我正在尝试用jPCT制作一个小程序。使用jPCT需要将jPCT jar添加到类路径中。我以为我有,但我仍然得到一个关于jPCT的一个类的类not found异常 我的命令: $ 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&g

我正在尝试用jPCT制作一个小程序。使用jPCT需要将jPCT jar添加到类路径中。我以为我有,但我仍然得到一个关于jPCT的一个类的类not found异常

我的命令:

$ 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>

我做错了什么?

您使用过像Tomcat这样的服务器吗?如果有,您可能需要将jar文件的路径分配给它,或者将jpct.jar复制到tomcat/lib/dir。

您必须将依赖项放在为Applet.jar文件提供服务的同一web服务器上,并给出绝对位置或相对于Applet根上下文的位置

您必须从web服务器而不是文件系统将小程序加载到web浏览器中

归档=归档员

此可选属性描述了一个 一个或多个包含类的存档 以及其他需要的资源 预加载。类被加载 使用 具有给定 代码库。档案馆 由、、分隔,。注意:在JDK1.1中, 多个小程序标记具有相同的 代码库共享同一个 类加载器。这是一些人使用的 实现interapplet的客户端代码 表达未来的JDK可能提供 小程序间的其他机制 表达出于安全原因, 小程序的类加载器可以读取 仅来自同一个代码库 小程序已启动。这意味着 archiveList中的档案必须 在与相同的目录中,或在 代码库的子目录。条目 在格式为../a/b.jar的archiveList中 除非明确说明,否则不起作用 在安全策略中允许 文件,http文件除外 代码库,档案在哪里 archiveList必须来自同一主机 作为代码库,但可以有 在他们的道路上

如果您的小程序位于/var/www/html/applet.jar,那么最简单的方法就是将依赖项放在完全相同的位置/var/www/html/jcpt.jar,然后您可以直接引用它,而不必担心计算相对路径

范例


一般来说,您不必将.jar文件放在Tomcat的lib目录中,它们应该放在WEB-INF/lib中,也有例外,但它们非常少。好吧~我必须说您很精确,然后我们应该将jpct.jar文件的路径写入Tomcat/conf dir下的server.xml,对吗?你不应该退出任何Tomcat特定的文件或将任何文件放在Tomcat特定的目录中,作为一般规则,一切都应该放在.war中,直到我准备好,我才使用任何服务器。它都是本地的,所以现在我只是在FireFox中打开我的HTML文件。@John小程序需要知道从哪里加载依赖项,并且出于安全原因,它必须是为小程序提供服务的服务器。您可以从任何web服务器提供html和.jar文件,但它们必须来自服务器,小程序安全模型才能找到它们。请在运行时显示整个错误消息javac@bba运行javac时没有错误消息。唯一的错误消息是在我打开页面时运行firefox的终端中产生的。我已经发布了。我怀疑你的主机名是applet,试试localhostinstead@Jarrod阿玛希给了我一个。。。独特的DHCP设置。我将applet名称作为applet放入Amahi控制面板,所以它说要将applet放入地址栏才能访问它。我的服务器与我的dev box是不同的机器,所以localhost无法工作。无论如何,我在服务器上试过了,不行,但我的服务器上有来自Apache的HTML文件。@Jarrod,等等,现在它可以工作了!我想我也有缓存问题。。。。非常感谢你!它们位于同一目录中,我的代码与您的示例相匹配,查看源代码验证是否正确地向我提供了HTML,但我仍然收到相同的错误。我知道它找到了罐子,因为当它没有找到的时候,在我问这个问题之前,它发出了找不到罐子的警告。这些都不见了,但我的错误依然存在。事实证明,这只是因为我换了机器才起作用。至少这意味着它是客户端的,我的代码没有问题。我想我下一步可以试试苏。谢谢你的帮助。
$ 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)
    <applet code="HelloWorld"
          width=640
          height=480
          archive="HelloWorld.jar,jpct.jar">
    </applet>