首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用<object>标记的Java Applet中的ClassNotFoundException

使用<object>标记的Java Applet中的ClassNotFoundException
EN

Stack Overflow用户
提问于 2009-03-16 15:54:38
回答 4查看 11.1K关注 0票数 1

我正在尝试使用标记嵌入Java Applet,这是一种严格的XHTML方法。

在浏览了很多网站后,我尝试了this example,它似乎工作得很好:

代码语言:javascript
复制
<!--[if !IE]> Firefox and others will use outer object -->
  <object classid="java:Sample2.class" 
          type="application/x-java-applet"
          archive="Sample2.jar" 
          height="300" width="450" >
    <!-- Konqueror browser needs the following param -->
    <param name="archive" value="Sample2.jar" />
  <!--<![endif]-->
    <!-- MSIE (Microsoft Internet Explorer) will use inner object --> 
    <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" 
            codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"
            height="300" width="450" > 
      <param name="code" value="Sample2" />
      <param name="archive" value="Sample2.jar" />
      <strong>
        This browser does not have a Java Plug-in.
        <br />
        <a href="http://java.sun.com/products/plugin/downloads/index.html">
          Get the latest Java Plug-in here.
        </a>
      </strong>
    </object> 
  <!--[if !IE]> close outer object -->
  </object>
  <!--<![endif]-->

我下载了Sample2.jar,并在localhost上运行得很好。

现在,我使用自己的JAR文件(archive="piccolo.jar piccolox.jar netscape.jar scatterplot.jar“)将Sample2.class替换为我需要使用的JAR文件:

代码语言:javascript
复制
<!--[if !IE]> Firefox and others will use outer object -->
<object
    classid="java:ar.uba.exactas.infovis.ivides.Scatterplot.class"
    type="application/x-java-applet"
    archive="piccolo.jar piccolox.jar netscape.jar scatterplot.jar"
    height="300" width="450" >
    <!-- Konqueror browser needs the following param -->
    <param name="archive" value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />
<!--<![endif]-->
    <!-- MSIE (Microsoft Internet Explorer) will use inner object -->
    <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
                    codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"
                    height="300" width="450" >
        <param name="code" value="ar.uba.exactas.infovis.ivides.Scatterplot" />
        <param name="archive" value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />
        <strong>
            This browser does not have a Java Plug-in.
            <br />
            <a href="http://java.sun.com/products/plugin/downloads/index.html">
                Get the latest Java Plug-in here.
            </a>
        </strong>
    </object>
<!--[if !IE]> close outer object -->
</object>
<!--<![endif]-->

这样做之后,我得到了这个日志转储:

代码语言:javascript
复制
java.lang.ClassNotFoundException: ar.uba.exactas.infovis.ivides.Scatterplot.class
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://localhost/infovisUBA/2008-2C/tpfinal/bin/ar/uba/exactas/infovis/ivides/Scatterplot/class.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)
    ... 7 more
Excepción: java.lang.ClassNotFoundException: ar.uba.exactas.infovis.ivides.Scatterplot.class

我看到的唯一区别是我在包中使用了一个类。

另外,请注意我确实是用标签做了这个工作,但我不能用做。

有什么线索吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-26 17:42:47

这是个很难的问题..。

挣扎了很长时间,但最终发现问题出在Opera本身。我使用的是有这个bug的alpha版本。现在它工作得很好!

票数 0
EN

Stack Overflow用户

发布于 2009-03-16 15:58:39

你有没有写过这样的话:

代码语言:javascript
复制
<param name="code" 
       value="ar.uba.exactas.infovis.ivides.Scatterplot.class" />
<param name="archive"
       value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />

而不是:

代码语言:javascript
复制
<param name="code"
       value="ar.uba.exactas.infovis.ivides.Scatterplot" />
<param name="archive"
       value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />

不同之处在于代码值的末尾缺少".class“。根据示例判断,它应该位于classid属性的末尾,而不是code参数的值的末尾。

这就是堆栈跟踪对我的建议:

代码语言:javascript
复制
Excepción: java.lang.ClassNotFoundException: 
    ar.uba.exactas.infovis.ivides.Scatterplot.class

我不希望在类名的末尾看到".class“。

票数 1
EN

Stack Overflow用户

发布于 2009-03-16 16:28:01

如果这不是Jon Skeet建议的,那么检查您的JAR文件清单,并确保您的主类引用没有以".class“结尾。例外情况是:

代码语言:javascript
复制
Excepción: java.lang.ClassNotFoundException: 
  ar.uba.exactas.infovis.ivides.Scatterplot.class

表明您正在以某种方式告诉Java运行ar.uba.exactas.infovis.ivides.Scatterplot.class而不是ar.uba.exactas.infovis.ivides.Scatterplot。你只需要找到发生这种情况的地方。

另请注意,在异常转储的中间,有以下抱怨(由我包装):

代码语言:javascript
复制
Caused by: java.io.IOException:
 open HTTP connection failed:
 http://localhost/infovisUBA/2008-2C/tpfinal/
        bin/ar/uba/exactas/infovis/ivides/Scatterplot/class.class

它不知何故试图装入错误的类...你的超文本标记语言中有一个额外的".class""/class"。试一试,如果你还没有试过,请替换

代码语言:javascript
复制
classid="java:ar.uba.exactas.infovis.ivides.Scatterplot.class"

使用

代码语言:javascript
复制
classid="java:ar.uba.exactas.infovis.ivides.Scatterplot"

另外,在两个浏览器中都会得到相同的异常吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/651032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档