【问题标题】:java.lang.ClassNotFoundException: Applet using external jarjava.lang.ClassNotFoundException:使用外部 jar 的小程序
【发布时间】:2016-03-27 13:24:44
【问题描述】:

我正在使用jsp页面开发小程序代码。

    <APPLET 
      id = "app"
      codebase="<%=request.getContextPath()%>/lib/" 
      code="com.myDemo.test.RunApplet.class" 
      width=100 
      height=50 
      archive="myApp1.jar, myApp2.jar">    
   </APPLET>

我的目录结构是:

DemoProject
  -- src (some classes & packeages)
  -- build
  -- WebContent
       -- css (some css file)
       -- script (some js file)
       -- WEB-INF
            -- jsp(some jsp file)
                 -- myApplet.jsp
            -- lib
                 -- myApp1.jar
                 -- myApp2.jar

当我执行 myApplet.jsp 时会抛出错误

java.lang.ClassNotFoundException:com.myDemo.test.RunApplet.class

我也申请了

codebase = "."
codebase = "classes"
codebase = "classes/"

但仍然是 ClassNotFoundException。

【问题讨论】:

标签: java html jsp applet


【解决方案1】:

请注意,WEB-INF 文件夹中的任何内容只能被后端 servlet 读取,不能被浏览器中运行的任何内容(包括小程序[1])读取。

如果lib文件夹中的两个jar只供小程序使用,可以将文件夹上移至webcontent级别。如果您的后端也使用它们,则必须复制它们或创建一个 servlet 将它们提供给前端。

[1]What is WEB-INF used for in a Java web application?

【讨论】:

  • 谢天谢地,看到这个问题的人意识到这里可能存在什么问题。 :) OP 可以尝试直接在浏览器地址栏中获取这些 Jar 以确认您的分析。
  • @billc.cn 感谢您纠正问题并给我解决方案。
【解决方案2】:

你必须引用中的所有jar

像你一样:

archive="myApp1.jar, myApp2.jar"

注意 jar 在存档中的位置:

How to specify correctly codebase and archive in Java applet?

然后您必须检查所有依赖项,并一一包含它们:

解决方案1(如果不是太多jar):尝试,检测异常(如:com.myDemo.test),包含jar,等等。

你必须至少给出每一个依赖项。

如果您的代码相当短(小程序的原理),则下载时间会更短。

解决方案 2:使用一些工具:jaranalysisr,...

How to list dependencies of a JAR

解决方案 3:非常简单,但提供了非常大的 jar:将所有内容都包含在一个 jar 中

【讨论】:

  • 你能简单解释一下吗?我必须检查哪种依赖项!以及如何引用所有的jar?
  • 我检查了 RunApplet.class 是否存在于 myApp1.jar 中,根据我的要求,我不能将所有内容都包含在一个 jar 中。
  • @KevalTrivedi ,异常说 jvm 找不到它。这是第一个要解决的问题:请参阅有关位置的链接。第二:至少放你需要的罐子,或者重构它们(类最少的特殊罐子)。我做过一次。
猜你喜欢
  • 2011-06-30
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2014-09-12
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多