当前位置: 首页 > 面试题库 >

Applet类加载器无法在Applet的jar中找到类

楚方伟
2023-03-14
问题内容

我开始问这个问题,然后在提交之前弄清楚了答案。 我决定无论如何都要发布问题,以便遇到相同问题的其他人也可以从我的错误中学习。

我遇到一个applet(实际上是一个JApplet)问题,无法实例化包含在与applet相同的jar中的另一个类。我在Java控制台上看到的异常是:

线程“ thread applet-com.company.program.cm.hmi.MediatorApplet-1”中的异常java.lang.NoClassDefFoundError:com / company / program / cm / cs / JDataStore
    在com.company.program.cm.hmi.MediatorApplet.getMediator(MediatorApplet.java:63)
    在com.company.program.cm.hmi.MediatorApplet.init(MediatorApplet.java:49)
    在sun.plugin2.applet.Plugin2Manager $ AppletExecutionRunnable.run(未知源)
    在java.lang.Thread.run(未知来源)
引起原因:java.lang.ClassNotFoundException:com.company.program.cm.cs.JDataStore
    在sun.plugin2.applet.Applet2ClassLoader.findClass(未知来源)
    在java.lang.ClassLoader.loadClass(未知来源)
    在java.lang.ClassLoader.loadClass(未知来源)
    在java.lang.ClassLoader.loadClassInternal(未知来源)
    ...另外4个
引起原因:java.io.IOException:打开HTTP连接失败:http:// localhost:8080 / TransportHMI / pages / com / company / program / cm / cs / JDataStore.class
    在sun.plugin2.applet.Applet2ClassLoader.getBytes(未知来源)
    在sun.plugin2.applet.Applet2ClassLoader.access $ 000(未知来源)
    在sun.plugin2.applet.Applet2ClassLoader $ 1.run(未知源)
    在java.security.AccessController.doPrivileged(本机方法)
    ...另外8个

我知道JDataStore该类包含在jar中。如果使用列出内容jar tvf CM_Library.jar,则可以看到它在正确的包装下。但是,上面的链接异常使我相信html" target="_blank">类加载器没有在档案中搜索JDataStore,而是在Web服务器上寻找JDataStore.class文件。为什么是这样?类加载器知道要从jar中加载MediatorApplet类,为什么还不对它进行JDataStore检查呢?如果我没有在applet标记上正确指定参数,我也将在此处包括该参数:

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

问题答案:

从我的问题中得出的不是特别明显的是,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>

可以修复错误。异常消息不是特别有用。当实际的问题是它无法为所请求的类加载超类时,您可能会认为它根本找不到该类。



 类似资料:
  • 问题内容: 一些用户抱怨小程序不再起作用,当他们查看Java控制台时,遇到一个java.lang.noClassDefFoundError并检查我的访问日志,我发现他们已经下载了包含该类的jar文件,然后发出get命令。要求特定的班级。 不同的用户中断不同的类。 一些用户很好。 任何想法可能导致此问题/解决此问题。 我已经检查以确保该文件位于其Java缓存中,清除了缓存等。似乎没有任何修复方法。

  • 我试图从JApplet调用JavaScript函数。我搜索了教程,他们说我需要导入并使用netscape。javascript。*从我的插件。罐子 我确实导入了netscape.javascript.*,我正在使用DrJava,它一直说找不到getWindow方法。 这就是它给我的错误: (MinesweeperApplet扩展了JApplet) 这是MinesweeperApplet类中的一段代

  • 问题内容: 当我尝试在applet浏览器中运行applet时,无法找到资源(图像)。我尝试像这样加载资源: 但是当我在appet查看器中运行它时,路径是这样的:imgPath:file:D:/Work/app/build/classes/com/blah/Images/a.png 虽然此路径中有图像,但前缀文件是:导致问题,我该如何测试此代码? 当部署在服务器中并且代码库返回服务器URL时,此代码

  • 问题内容: 我创建了一个Java applet(.class文件),并用它制作了一个.jar并对该.jar文件进行了数字签名。现在我需要将.jar作为小程序运行在Firefox中。我要在html代码中放入什么以将.jar文件作为applet运行?我尝试了一下,但它不起作用,它尝试获取.class文件,如何使用Internet Explorer和Firefox中的applet标签将applet加载并

  • 几天来,我一直在尝试为我的多模块maven项目创建一个可执行的jar文件。但是,当我尝试运行这个jar文件时,我得到“无法找到或加载主类src.main.java.com.domain.MainClass”(为了公司的隐私,我已经更改了名称domain和MainClass) 我已经找了几天了,没有一个明显的提示似乎有效。 我使用的命令:mvn clean package,然后我cd到目标文件夹中,

  • 我试图上传一个小程序到一个网站上,它问我类名。我使用过RoskieAppled.class/RoskieAppled.class和RoskiePanel.class/RoskiePanel.class,但当我尝试运行它时,它在网站上给了我一个ClassNotFoundException。我可以在我的计算机上本地运行applet而没有任何问题。 我曾在StackOverflow上搜索过类似的问题,但