Java 小程序类加载器在小程序';s罐

Java 小程序类加载器在小程序';s罐,java,applet,classloader,Java,Applet,Classloader,我开始问这个问题,然后在提交之前找到了答案。无论如何,我决定把这个问题贴出来,这样其他遇到同样问题的人就可以从我的错误中吸取教训 我遇到了一个小程序(实际上)无法实例化另一个类的问题,该类与小程序包含在同一个jar中。我在Java控制台上看到的例外是: Exception in thread "thread applet-com.company.program.cm.hmi.MediatorApplet-1" java.lang.NoClassDefFoundError: com/compan

我开始问这个问题,然后在提交之前找到了答案。无论如何,我决定把这个问题贴出来,这样其他遇到同样问题的人就可以从我的错误中吸取教训


我遇到了一个小程序(实际上)无法实例化另一个类的问题,该类与小程序包含在同一个jar中。我在Java控制台上看到的例外是:

Exception in thread "thread applet-com.company.program.cm.hmi.MediatorApplet-1" java.lang.NoClassDefFoundError: com/company/program/cm/cs/JDataStore at com.company.program.cm.hmi.MediatorApplet.getMediator(MediatorApplet.java:63) at com.company.program.cm.hmi.MediatorApplet.init(MediatorApplet.java:49) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: com.company.program.cm.cs.JDataStore at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) ... 4 more Caused by: java.io.IOException: open HTTP connection failed:http://localhost:8080/TransportHMI/pages/com/company/program/cm/cs/JDataStore.class at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source) at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source) at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) ... 8 more
通过查看已发布的一篇文章找到答案。埃迪的回答并没有解决那个问题,但它确实为我的问题提供了解决方案

从我的问题中不太明显的是,JDataStore类继承自另一个包含在不同jar中的类。我已经有几个月没有处理JDataStore的实现细节了,所以我完全忘记了它的父类org.json.simple.JSONObject不在CM_Library.jar中,而是在json_simple-1.0.2.jar中。修复相当简单,只需将缺少的jar复制到codebase目录,并将缺少的jar添加到applet标记的
archive
属性中以逗号分隔的归档列表中:

<applet id="mediator-applet"
        width="0"
        height="0"
        codebase="./"
        archive="CM_Library.jar, json_simple-1.0.2.jar"
        code="com.company.program.cm.hmi.MediatorApplet">
</applet>


这修复了错误。异常消息不是特别有用。这会让您相信它根本找不到类,而实际问题是它无法为请求的类加载超类。

很高兴知道这个问题对我以外的人很有帮助。
<applet id="mediator-applet"
        width="0"
        height="0"
        codebase="./"
        archive="CM_Library.jar, json_simple-1.0.2.jar"
        code="com.company.program.cm.hmi.MediatorApplet">
</applet>