2009-03-16 8 views
1

Ich versuche, ein Java-Applet mit dem OBJECT> -Tag < einzubetten, die XHTML Strict ist, dies zu tun.ClassNotFoundException in Java Applet mit <object> Tag

Nach vielen Websites surfen, habe ich versucht, this example das ist ziemlich gut zu funktionieren scheint:

dass Sample2.jar
<!--[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]--> 

Ich heruntergeladen und perfekt auf localhost funktioniert.

Jetzt habe ich Sample2.class für die eine, die ich verwenden muss (ar.uba.exactas.infovis.ivides.Scatterplot.class) und meine eigenen JAR-Dateien (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]--> 

Nach so tun, ich bin gerade dieses Protokoll dump:

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 

Der einzige Unterschied, den ich sehe, ist, dass ich eine Klasse in einem Paket bin mit .

Auch, bitte beachten Sie, dass ich dies mit dem < APPLET> -Tag gemacht habe, aber ich kann es nicht mit < OBJECT> machen.

Irgendwelche Hinweise?

Antwort

0

Nun, das war ein hartes ...

viel Zeit Kämpfte aber fand schließlich, dass das Problem war Opera selbst. Ich benutzte eine Alpha-Version, die diesen Fehler hatte. Jetzt funktioniert es großartig!

1

Haben Sie zufällig diese geschrieben:

<param name="code" 
     value="ar.uba.exactas.infovis.ivides.Scatterplot.class" /> 
<param name="archive" 
     value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" /> 

statt:

<param name="code" 
     value="ar.uba.exactas.infovis.ivides.Scatterplot" /> 
<param name="archive" 
     value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" /> 

Der Unterschied der Mangel an „.class“ ist am Ende des Codewert. Gemessen am Beispiel sollte es am Ende des classid Attributs sein, aber nicht am Ende des Wertes für den code Parameter.

Das ist, was der Stack-Trace mir schon sagt:

Excepción: java.lang.ClassNotFoundException: 
    ar.uba.exactas.infovis.ivides.Scatterplot.class 

Ich würde nicht erwarten, dass die „.class“ am Ende des Klassennamen zu sehen.

+0

versuchten beide, aber Probleme in beiden IE und FF. Gute Beobachtung, danke. – Seb

+1

Es würde wirklich helfen, wenn Sie Ihre Frage mit dem HTML aktualisieren könnten, mit dem Sie tatsächlich Probleme haben, und nicht mit dem Beispiel, das funktioniert. –

+0

Ja, danke. Jetzt aktualisiert – Seb

0

Wenn es nicht das ist, was Jon Skeet vorgeschlagen hat, dann überprüfen Sie Ihre JAR-Dateimanifeste und stellen Sie sicher, dass Ihre Hauptklassenreferenz nicht in ".class" endet. Die Ausnahme:

Excepción: java.lang.ClassNotFoundException: 
    ar.uba.exactas.infovis.ivides.Scatterplot.class 

zeigt an, dass irgendwie, sind Sie Java sagen ar.uba.exactas.infovis.ivides.Scatterplot.class statt ar.uba.exactas.infovis.ivides.Scatterplot zu laufen. Sie müssen nur herausfinden, wo dies geschieht.

Auch in der Mitte des Exception-Dump bemerken, wird die folgende Beschwerde (von mir eingewickelt):

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

es irgendwie die falsche Klasse zu laden versucht, ... Sie haben eine extra ".class" oder "/class" irgendwo in deinem HTML.Genau dies versuchen, wenn Sie nicht bereits versucht, auch

classid="java:ar.uba.exactas.infovis.ivides.Scatterplot.class" 

mit

classid="java:ar.uba.exactas.infovis.ivides.Scatterplot" 

ersetzen, erhalten Sie die gleiche Ausnahme in beiden Browsern?

+0

Manifest wird von Eclipse generiert. Ich habe es jedoch überprüft und es ist perfekt, ohne Klasse. Ich werde versuchen, es wieder zu generieren, obwohl ich nicht denke, dass es helfen würde, weil es mit gerade gut funktionierte, also glaube ich, dass es kein Problem der .JAR-Datei ist. Danke trotzdem! – Seb

0

Ich habe das gleiche Problem mit meinem Applet. Es läuft gut von IE, aber schlägt mit ClassNotFoundException fehl. Die Fehlermeldung zeigt an, dass das Firefox-Java-Plugin versucht, die Klassendatei getrennt vom Server und nicht von der mitgelieferten jar-Datei herunterzuladen.

Ich fand heraus, dass in Firefox die Reihenfolge der Archiv- und Codeattribute zählt. Meine ursprüngliche Spezifikation war:

Applet name = "XYZ" code = "xyApplet" archive = "XXX.jar" codebase = "" width = '100%' height = '100%' mayscript = "mayscript"

änderte ich den Auftrag zu:

Applet name = "XYZ" archive = "XXX.jar" code = "xyApplet" width = '100%' height = '100%' mayscript = "mayscript"

Und es funktioniert jetzt.