Applet: java.lang.ClassNotFoundException

Hi,

ich habe ein Applet, das ich in einem war file in einem jboss/tomcat deploye. Leider habe ich das Problem, das egal was ich versuche, das Applet diesen Fehler meldet:
Laden: Klasse HttpChatApplet.class nicht gefunden

java.lang.ClassNotFoundException: HttpChatApplet.class

at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:162)

at java.lang.ClassLoader.loadClass(ClassLoader.java:289)

at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:123)

at java.lang.ClassLoader.loadClass(ClassLoader.java:235)

at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:566)

at sun.applet.AppletPanel.createApplet(AppletPanel.java:617)

at sun.plugin.AppletViewer.createApplet(Unknown Source)

at sun.applet.AppletPanel.runLoader(AppletPanel.java:546)

at sun.applet.AppletPanel.run(AppletPanel.java:298)

at java.lang.Thread.run(Thread.java:534)

Caused by: java.io.IOException: open HTTP connection failed.

at sun.applet.AppletClassLoader.getBytes(AppletClassLoader.java:265)

at sun.applet.AppletClassLoader.access$100(AppletClassLoader.java:43)

at sun.applet.AppletClassLoader$1.run(AppletClassLoader.java:152)

at java.security.AccessController.doPrivileged(Native Method)

at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:149)

… 9 more

mein applet-aufruf:

meine verzeichnisstruktur im war file:
BonkersChat.war

META-INF-\>MANIFEST.MF
WEB-INF -\>classes-\>com-\>de-\>bonkers-\>chat-\>HttpChatApplet.class(und einige andere
 web.xml
index.jsp

Wieso wird das Applet nicht gefunden?

Vielen Dank!

Hallo,

ich habe ein Applet, das ich in einem war file in einem
jboss/tomcat deploye.

Ein Java-Applet gehört nicht in einen JBoss. JBoss ist ein Application Server, da gehören J2EE Applikationen rein, und keine Applets.

java.lang.ClassNotFoundException: HttpChatApplet.class
meine verzeichnisstruktur im war file:

Da ich aber davon ausgehe, dass du mit „Applet“ eigentlich kein Applet meinst :wink: will ich mal die Verzeichnisstruktur skizzieren:

jsp/\*.jsp
META-INF/MANIFEST.MF
WEB-INF/web.xml
WEB-INF/lib/\*.jar
WEB-INF/classes/com/de/bonkers/chat/HttpChatApplet.class

Die Klasse HttpChatApplet muss dann natürlich auch in diesem package sein, spricht

package com.de.bonkers.chat;

public class HttpChatApplet {
}

Deine web.xml sollte in etwa so aussehen:

<?xml version="1.0" encoding="ISO-8859-1"?>chatcom.de.bonkers.chat.HttpChatAppletchat/chat

Wenn das alles so ist, dann sollte es auch gefunden werden, natürlich unter der Vorraussetzung dass es ordentlich deployed wurde. Die Anwendung sollte dann z.B. unter http://localhost:8080/applikationsname/chat gefunden werden.

mfg
deconstruct

Hallo,

Hi auch,

Ein Java-Applet gehört nicht in einen JBoss. JBoss ist ein
Application Server, da gehören J2EE Applikationen rein, und
keine Applets.

mmmh … theoretisch könnte man doch ein Servlet schreiben, das die Bytes eines class-Files an den Client schickt - der richtige Content-Type wär aber wichtig … :smiley: *troll*

ciao
Lars

da hast du ins schwarze getroffen, genau so siehts bei mir aus. naja bis auf die web.xml, ich will ja kein Applet als Servlet definieren:

BonkersChatcom.de.bonkers.chat.ChatServletBonkersChat/BonkersChat

wieso gehört ein applet nicht in einen jboss? sicher ist er für J2ee, aber was spricht dagegen? ich will ja auch den tomcat mit dieser anwendung nutzen und hab zusätzlich noch ne anwendung für den jboss. was ich hier installieren will, ist ein chat, bei dem ein applet mit einem servlet kommuniziert. das applet muss aber auf dem gl. server wie das servlet liegen(Sandbox etc.). meine chat-classe befindet sich in dem entsprechenden package com.de.bonkers.chat. nur warum wird sie nicht gefunden? das war file wird doch im tmp-verzeichnis des jboss/tomcats entpackt, ist also vorhanden. ich verstehe das nicht :frowning:

danke und gruß Bonkers

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

wieso gehört ein applet nicht in einen jboss? sicher ist er
für J2ee, aber was spricht dagegen?

Das hab ich mißverstanden. Ich dachte, du hast das Servlet fälschlicherweise als Applet bezeichnet. Daher dachte ich, dass kein Applet existert.

Also, soweit ich das jetzt verstanden hab:
Du hast ein Servlet namens ChatServlet und du hast ein Applet, welches vermutlich durch eine JSP-Seite angezeigt wird und im Browser des Benutzers läuft, oder?

das applet muss aber auf dem gl. server wie das servlet
liegen(Sandbox etc.).

Solange es nicht signiert ist: ja.

meine chat-classe befindet sich in dem
entsprechenden package com.de.bonkers.chat. nur warum wird sie
nicht gefunden? das war file wird doch im tmp-verzeichnis des
jboss/tomcats entpackt, ist also vorhanden. ich verstehe das
nicht :frowning:

Was ich bis jetzt nicht verstehe:
Entsteht die ClassNotFoundException im Tomcat oder wird sie von der JVM des Browsers geworfen? Weil im zweiten Fall hieße das ja, dass der Browser die Klasse nicht finden kann und nicht der Tomcat.
Kannst du da mal Licht in die Sache bringen? Weil dann kann ich dir sicher weiterhelfen.

mfg
deconstruct

ja genau jetzt hast du mich verstanden, entschuldige, wenn ich mich kryptisch ausgedrückt habe. die exception wird im browser(java konsole) geworfen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

ja genau jetzt hast du mich verstanden, entschuldige, wenn ich
mich kryptisch ausgedrückt habe. die exception wird im
browser(java konsole) geworfen.

Bindest du das Applet über ein JAR-File ein, oder soll es die Class-Dateien direkt vom Webserver lesen (also aus WEB-INF/classes). Denn letzteres geht nicht, das Tomcat die *.class-Dateien nicht rausrückt. Verständlicherweise.
Also meine Fragen:
Wenn JAR-File, wie schaut dessen Dateistruktur aus?
Wenn nicht, so liegen die *.class-Dateien?

mfg
deconstruct

index.jsp
META-INF/MANIFEST.MF
WEB-INF/web.xml
WEB-INF/classes/com/de/bonkers/chat/HttpChatApplet.class

so siehts im war-file aus. wenn du jetzt meinst, das ich das applet in ein jar packen muss, dann probier ich das mal aus. dann hab ich das jar-file, das das applet enthält, in meinem war file.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

bekomme leider noch den gleichen fehler:

Laden: Klasse HttpChatApplet.class nicht gefunden

java.lang.ClassNotFoundException: HttpChatApplet.class

at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:162)

at java.lang.ClassLoader.loadClass(ClassLoader.java:289)

at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:123)

at java.lang.ClassLoader.loadClass(ClassLoader.java:235)

at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:566)

at sun.applet.AppletPanel.createApplet(AppletPanel.java:617)

at sun.plugin.AppletViewer.createApplet(Unknown Source)

at sun.applet.AppletPanel.runLoader(AppletPanel.java:546)

at sun.applet.AppletPanel.run(AppletPanel.java:298)

at java.lang.Thread.run(Thread.java:534)

Caused by: java.io.IOException: open HTTP connection failed.

at sun.applet.AppletClassLoader.getBytes(AppletClassLoader.java:265)

at sun.applet.AppletClassLoader.access$100(AppletClassLoader.java:43)

at sun.applet.AppletClassLoader$1.run(AppletClassLoader.java:152)

at java.security.AccessController.doPrivileged(Native Method)

at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:149)

… 9 more

meine Verzeichnisstruktur im war-file:

applet.jsp
chatApplet.jar
META-INF/MANIFEST.MF
WEB-INF/web.xml
WEB-INF/classes/com/de/bonkers/chat/*.class(ChatServlet etc.)

meine Verzeichnisstruktur im jar-file chatApplet:

META-INF/MANIFEST.MF
com/de/bonkers/chat/HttpChatApplet.class

und der aufruf vom applet.jsp:

hast du(od. sonst jemand) eine idee?

vielen dank!

Hallo,

index.jsp
META-INF/MANIFEST.MF
WEB-INF/web.xml
WEB-INF/classes/com/de/bonkers/chat/HttpChatApplet.class

so siehts im war-file aus. wenn du jetzt meinst, das ich das
applet in ein jar packen muss, dann probier ich das mal aus.
dann hab ich das jar-file, das das applet enthält, in meinem
war file.

Das WAR-File nützt dir hier nichts. Da kann der Browser nicht drauf zu greifen. Genausowenig wie auf die *.class-Dateien im Tomcat. Du musst eine JAR-Datei basteln, in der alle vom Applet benötigten Klassen (also alle die nicht mit der Standard JRE ausgeliefert werden) drin sind. Diese JAR-Datei muss irgendwo in dem Verzeichnis deiner Webapplikation auf dem Tomcat-Server liegen. Aber nicht ins WEB-INF Verzeichnis, denn darauf kann man von außen nicht zugreifen. Ob es richtig liegt, kannst du dadurch testen, indem du versuchst, die JAR-Datei mit einem Webbrowser herunterzuladen. Also z.B. http://localhost:8080/bonkers/applet/applet.jar.

Dann sollte der Browser auch alle Klassen finden.

mfg
deconstruct

1 „Gefällt mir“

Hallo,

hast du(od. sonst jemand) eine idee?

Kannst du die Datei chatApplet.jar mit einem Webbrowser herunterladen? Weil wenn das nicht geht, dann kommt eben die ClassNotFoundException. Und gibt mal bei code="" noch das Package mit an und lass die .class-Endung weg. Und bei Codebase musst du den Pfad angeben, in dem deine JAR-Datei liegt. Also wenn deine JAR-Datei im „applet“-Ordner liegt, dann machst du:
code=„com.de.bonkers.chat.HttpChatApplet“ codebase="./applet/" archive=„applet.jar“

Wenn du kein JAR-File verwenden willst, dann muss codebase auf den Ordner zeigen, in dem dein „com“-Ordner liegt. Und das archive="" kannst du dann weglassen.

mfg
deconstruct

1 „Gefällt mir“

danke, mit diesen änderungen im jsp funzt das ganze jetzt. vielen dank und 2 sterne für deine geduld :smile: