我正在尝试使用< OBJECT>嵌入Java Applet。标签,这是XHTML严格的做法。
在浏览了很多网站之后,我尝试了this example这似乎运作良好:
<!--[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上完美运行。
现在,我将Sample2.class替换为我需要使用的(ar.uba.exactas.infovis.ivides.Scatterplot.class)并使用我自己的JAR文件(archive =“piccolo.jar piccolox.jar netscape”。 jar scatterplot.jar“):
<!--[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]-->
这样做后,我开始使用这个日志转储:
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
我看到的唯一区别是我在包中使用了一个类。
另外,请注意我确实使用&lt; APPLET&gt;进行了这项工作。标签,但我无法使用&lt; OBJECT&gt;。
有任何线索吗?
答案 0 :(得分:1)
你有没有写过这个:
<param name="code"
value="ar.uba.exactas.infovis.ivides.Scatterplot.class" />
<param name="archive"
value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />
而不是:
<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
param的值的末尾。
这就是堆栈跟踪给我的意思:
Excepción: java.lang.ClassNotFoundException:
ar.uba.exactas.infovis.ivides.Scatterplot.class
我不希望在类名的末尾看到“.class”。
答案 1 :(得分:0)
如果不是Jon Skeet所建议的,那么请检查您的JAR文件清单,并确保您的主类引用不以“.class”结尾。例外:
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
。你只需要找到这种情况发生的地方。
另请注意在Exception转储中间,以下投诉(由我包裹):
Caused by: java.io.IOException:
open HTTP connection failed:
http://localhost/infovisUBA/2008-2C/tpfinal/
bin/ar/uba/exactas/infovis/ivides/Scatterplot/class.class
它试图加载错误的类......你的HTML中有一个额外的".class"
或"/class"
。试试这个,如果您还没有尝试过,请替换
classid="java:ar.uba.exactas.infovis.ivides.Scatterplot.class"
与
classid="java:ar.uba.exactas.infovis.ivides.Scatterplot"
另外,你在两个浏览器中都得到相同的异常吗?
答案 2 :(得分:0)
我的applet遇到了同样的问题。它从IE运行良好,但与ClassNotFoundException失败。错误消息表明,Firefox java插件试图单独从服务器下载类文件,而不是从提供的jar文件中下载。
我发现,在Firefox中,归档和代码属性的顺序很重要。我的原始规格是:
applet name =“XYZ”code =“x.y.Applet”archive =“xxx.jar”codebase =“”width ='100%'height ='100%'mayscript =“mayscript”
我将订单更改为:
applet name =“XYZ”archive =“xxx.jar”code =“x.y.Applet”width ='100%'height ='100%'mayscript =“mayscript”
它现在有效。
答案 3 :(得分:0)
嗯,这很难......
挣扎了很多时间,但终于发现问题是Opera本身。我正在使用有这个bug的alpha版本。现在它很棒!