Ein Java-Applet in eine Webseite einbinden

L-ectron-X

Gesperrter Benutzer
"Wie wird denn nun ein Applet richtig in eine HTML-Seite eingebunden?"

Diese Frage soll in den folgenden Beiträgen geklärt werden.

Mit der Verabschiedung des HTML 4-Standards wurde das Object-Tag eingeführt, mit dem einheitlich Media-Objekte in Webseiten eingebettet werden können.
Davor war das inzwischen veraltete, aber oftmals immer noch zu findende Applet-Tag für die Einbettung von Java-Applets in Webseiten vorgesehen.

Ich werde beide Tags näher beleuchten, empfehle aber die Verwendung des Object-Tags für die Einbindung von Java-Applets.
Sollte das Object-Tag nicht funktionieren kann das Applet-Tag, auch wenn es bereits veraltet ist, mal ausprobiert werden.



  1. Das Object-Tag
  2. Das Applet-Tag
  3. "Hilfe! Mein Browser startet das Applet nicht."



Weiterführende Links
 
Zuletzt bearbeitet von einem Moderator:

L-ectron-X

Gesperrter Benutzer
Das Object-Tag

Der XHTML-Standard (seit HTML 4.01) legt für die Einbettung das object-Tag fest.

1. Der Standard

Um ein Applet mit dem Object-Tag in eine Webseite einzubinden, werden folgende Zeilen notiert.
HTML:
<object codetype="application/java-archive"
     classid="java:MyApplet.class" width="400" height="300">
</object>


2. Parameter

Applets sind keineswegs starre Konstrukte. Es können von außen durch Parameter Werte eingeschleust werden, die entweder statisch festgelegt oder dynamisch, bspw. mit PHP generiert wurden.

Für das Object-Tag sieht das folgendermaßen aus:
HTML:
<object codetype="application/java-archive"
    classid="java:MyApplet.class" width="400" height="300">
    <param name="bild1" value="duke.gif">
</object>


3. Jar-Dateien

Applets können auch in einer Jar-Datei zusammengefasst und komprimiert werden, was einerseits die Übertragung verkürzt, andererseits bspw. zum Signieren von Applets erforderlich ist.
Manchmal benötigt man externe Bibliotheken, bspw. XML-Bibliotheken oder LookAndFeel's, die in einer Jar-Datei ausgeliefert werden. Mehrere Jar-Dateien werden im archive-Attribut mit Kommata getrennt aufgelistet.

Für das object-Tag sieht das folgendermaßen aus:
HTML:
<object codetype="application/java-archive"
     archive="MyAppletLib.jar" classid="java:MyApplet.class"
     width="400" height="300">
</object>


4. Praktische Beispiele zum Einbinden

"Ich habe eine Fehlermeldung, dass mein Applet nicht gefunden werden kann."

Oftmals treten diese Probleme im Zusammenhang mit verkehrt eingebundenen Applets auf.
Hier mal eine beispielhafte Fehlermeldung aus der Java-Console:
Laden: Klasse applets.HelloWorld.class nicht gefunden
java.lang.ClassNotFoundException: applets.HelloWorld.class
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadCode(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Damit ein Applet im Browser angezeigt werden kann, wird vorzugsweise das Object-Tag in eine HTML-Seite geschrieben. Die allgemeine Notierung habe ich oben schon gezeigt. Dieses Tag verrät dem Browser, wo er das Applet finden kann und bittet ihn, für das Applet eine Fläche in der Größe der im Tag angegebenen Attribute bereit zu stellen.
Normalerweise werden Java-Klassen in Packages zusammen gefasst. Bei der Erzeugung des Applet-Tags gibts dann einige Dinge zu beachten. So muss nun auch der Name des Packages in das code-Attribut.

Beispiel:
HTML:
<object codetype="application/java-archive"
     classid="java:applets.MyApplet.class" width="400" height="300">
</object>
Das Applet deklariert ein hier ein Package applets, also muss die class-Datei im Verzeichnis applets liegen.
Die HTML-Datei muss oberhalb von applets, d.h. eine Verzeichnisebene über applets liegen.

Wenn das Applet nicht auf dem gleichen Rechner oder in einem anderen Verzeichnis (unabhängig von deklarierten Packages) wie die einbettende HTML-Datei liegt, kommt das codebase-Attibut ins Spiel.
HTML:
<object codetype="application/java-archive"
     codebase="./example" classid="java:applets.MyApplet.class"
     width="400" height="300">
</object>
Hier liegt die HTML-Datei in einem Verzeichnis über dem Verzeichnis example. In example liegt das Package-Verzeichnis applets und darin die class-Datei des Applets.

Noch ein Beispiel:
HTML:
<object codetype="application/java-archive"
     codebase="http://www.java-forum.org/example" classid="java:applets.MyApplet.class"
     width="400" height="300">
</object>
Jetzt liegt das Applet sogar auf einem ganz anderen Webserver, als die einbettende HTML-Datei.
Der Browser wird also angewiesen, das Applet von der im codebase-Attribut angegebenen URL zu laden.
Auch hier liegt das Applet wieder in einem Package applets.

Um die Übertragungszeit des Applets zu verkürzen und um die Klassen in Bibliotheken zusammen zu fassen werden größere Applets (wie oben bereits beschrieben) oft in Jar-Dateien verpackt.
Damit der Browser das Applet in der Jar-Datei findet, muss ihm das bekannt gemacht werden:

HTML:
<object codetype="application/java-archive"
     codebase="./example" archive="MyAppletLib.jar" classid="java:applets.MyApplet.class"
     width="400" height="300">
</object>
In diesem Beispiel befindet sich das Applet und alle noch benötigten Dateien und Klassen in einem Jar-Archiv namens MyAppletLib.jar. Das Jar-Archiv ist in dem im codebase-Attribut angebenen Verzeichnis relativ zur HTML-Datei gespeichert (Eine Verzeichnisebene tiefer, im Verzeichnis expamle). Würde bspw. das codebase-Attribut fehlen, müsste die Jar-Datei im Verzeichnis der HTML-Datei gespeichert sein.
Im Jar-Archiv existiert im Wurzelverzeichnis ein Package namens applets in welchem das Applet liegt.

HTML:
<object codetype="application/java-archive"
     codebase="http://www.java-forum.org/example" archive="MyAppletLib.jar" classid="java:applets.MyApplet.class"
     width="400" height="300">
</object>
In diesem Beispiel befindet sich das Applet und alle noch benötigten Dateien und Klassen in einem Jar-Archiv namens MyAppletLib.jar. Das Jar-Archiv ist an der im codebase-Attribut angebenen URL gespeichert. Im Jar-Archiv existiert im Wurzelverzeichnis ein Package namens applets in welchem das Applet liegt.

Oft kommt es vor, dass man neben seinem eigenen Jar-Archiv auch noch weitere oder fremde Archiv(e) einbinden möchte, weil man externe Klassen benutzt hat.
Mehrere Jar-Archive werden im archive-Attribut durch Kommata getrennt aufgelistet.
Beispiel:
HTML:
<object codetype="application/java-archive"
     archive="MyAppletLib.jar,ExternalLib.jar" classid="java:applets.MyApplet.class"
     width="400" height="300">
</object>
 
Zuletzt bearbeitet von einem Moderator:

L-ectron-X

Gesperrter Benutzer
Das Applet-Tag

Das Applet-Tag ist inzwischen veraltet und sollte nicht mehr verwendet werden.

1. Der Standard

Um ein Applet mit dem Applet-Tag in eine Webseite einzubinden, werden folgende Zeilen notiert.
HTML:
<applet code="MeinApplet.class" width="400" height="300">
</applet>


2. Parameter

Applets sind keineswegs starre Konstrukte. Es können von außen durch Parameter Werte eingeschleust werden, die entweder statisch festgelegt oder dynamisch, bspw. mit PHP generiert wurden.

Für das Applet-Tag sieht das folgendermaßen aus:
HTML:
<applet code="MeinApplet.class" width="400" height="300">
    <param name="bild1" value="duke.gif">
</applet>


3. Jar-Dateien

Applets können auch in einer Jar-Datei zusammengefasst und komprimiert werden, was einerseits die Übertragung verkürzt, andererseits bspw. zum Signieren von Applets erforderlich ist.
Manchmal benötigt man externe Bibliotheken, bspw. XML-Bibliotheken oder LookAndFeel's, die in einer Jar-Datei ausgeliefert werden. Mehrere Jar-Dateien werden im archive-Attribut mit Kommata getrennt aufgelistet.

Für das Applet-Tag sieht das folgendermaßen aus:
HTML:
<applet archive="MeinJar.jar" code="MeinApplet.class" width="400" height="300">
</applet>


4. Alle Attribute in der Übersicht

Das Applet-Tag hat noch weitere Attribute, die ich an dieser Stelle mal auflisten möchte:

Tag/Attribut|Zweck/Beschreibung
<APPLET |
CODEBASE | URL des Klassenverzeichnisses (optional)
ARCHIVE | ein Jar-Archiv oder eine Auflistung mehrerer Bibliotheken (optional)
CODE | Applet-Datei ...oder... OBJECT = ein serialisiertes Applet
ALT | alternativer Text, der angezeigt wird, wenn Java vom Browser nicht gestartet werden kann (optional)
NAME | Name der Applet-Instanz (optional)
WIDTH | Breite in Pixel
HEIGHT | Höhe in Pixel
ALIGN | Ausrichtung des Applets im vom Browser (HTML-Seite) bereitgestellten Platz (optional)
VSPACE | vertikaler Abstand in Pixel (optional)
HSPACE | horizontaler Abstand in Pixel (optional)
>|
< PARAM NAME = "Parametername" VALUE = "Wert"> | Zur Einschleusung von Werten ins Applet (optional)
. . . | HTML-Tags welche ausgeführt werden, wenn das APPLET-Tag vom Browser ignoriert wird
</APPLET> |


5. Praktische Beispiele zum Einbinden

"Ich habe eine Fehlermeldung, dass mein Applet nicht gefunden werden kann."

Oftmals treten diese Probleme im Zusammenhang mit verkehrt eingebundenen Applets auf.
Hier mal eine beispielhafte Fehlermeldung aus der Java-Console:
Laden: Klasse applets.HelloWorld.class nicht gefunden
java.lang.ClassNotFoundException: applets.HelloWorld.class
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadCode(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Damit ein Applet im Browser angezeigt werden kann, wurde bis HTML 4 vorzugsweise das Applet-Tag in eine HTML-Seite geschrieben. Die allgemeine Notierung habe ich oben schon gezeigt. Dieses Tag verrät dem Browser, wo er das Applet finden kann und bittet ihn, für das Applet eine Fläche in der Größe der im Tag angegebenen Attribute bereit zu stellen.
Normalerweise werden Java-Klassen in Packages zusammen gefasst. Bei der Erzeugung des Applet-Tags gibts dann einige Dinge zu beachten. So muss nun auch der Name des Packages in das code-Attribut.

Beispiel:
HTML:
<applet code="applets.MyApplet" width="400" height="300">
</applet>
Das Applet deklariert ein hier ein Package applets, also muss die class-Datei im Verzeichnis applets liegen.
Die HTML-Datei muss oberhalb von applets, d.h. eine Verzeichnisebene über applets liegen.

Wenn das Applet nicht auf dem gleichen Rechner oder in einem anderen Verzeichnis (unabhängig von deklarierten Packages) wie die einbettende HTML-Datei liegt, kommt das codebase-Attibut ins Spiel.
HTML:
<applet codebase="./example" code="applets.MyApplet" width="400" height="300">
</applet>
Hier liegt die HTML-Datei in einem Verzeichnis über dem Verzeichnis example. In example liegt das Package-Verzeichnis applets und darin die class-Datei des Applets.

Noch ein Beispiel:
HTML:
<applet codebase="http://www.java-forum.org/example" code="applets.MyApplet" width="400" height="300">
</applet>
Jetzt liegt das Applet sogar auf einem ganz anderen Webserver, als die einbettende HTML-Datei.
Der Browser wird also angewiesen, das Applet von der im codebase-Attribut angegebenen URL zu laden.
Auch hier liegt das Applet wieder in einem Package applets.

Um die Übertragungszeit des Applets zu verkürzen und um die Klassen in Bibliotheken zusammen zu fassen werden größere Applets (wie oben bereits beschrieben) oft in Jar-Dateien verpackt.
Damit der Browser das Applet in der Jar-Datei findet, muss ihm das bekannt gemacht werden:
HTML:
<applet codebase="./example" archive="MyAppletLib.jar" code="applets.MyApplet" width="400" height="300">
</applet>
In diesem Beispiel befindet sich das Applet und alle noch benötigten Dateien und Klassen in einem Jar-Archiv namens MyAppletLib.jar. Das Jar-Archiv ist in dem im codebase-Attribut angebenen Verzeichnis relativ zur HTML-Datei gespeichert (Eine Verzeichnisebene tiefer, im Verzeichnis expamle). Würde bspw. das codebase-Attribut fehlen, müsste die Jar-Datei im Verzeichnis der HTML-Datei gespeichert sein.
Im Jar-Archiv existiert im Wurzelverzeichnis ein Package namens applets in welchem das Applet liegt.

HTML:
<applet codebase="http://www.java-forum.org/example" archive="MyAppletLib.jar" code="applets.MyApplet" width="400" height="300">
</applet>
In diesem Beispiel befindet sich das Applet und alle noch benötigten Dateien und Klassen in einem Jar-Archiv namens MyAppletLib.jar. Das Jar-Archiv ist an der im codebase-Attribut angebenen URL gespeichert. Im Jar-Archiv existiert im Wurzelverzeichnis ein Package namens applets in welchem das Applet liegt.

Oft kommt es vor, dass man neben seinem eigenen Jar-Archiv auch noch weitere oder fremde Archiv(e) einbinden möchte, weil man externe Klassen benutzt hat.
Mehrere Jar-Archive werden im archive-Attribut durch Kommata getrennt aufgelistet.
Beispiel:
HTML:
<applet archive="MyAppletLib.jar,ExternalLib.jar" code="applets.MyApplet" width="400" height="300">
</applet>
 
Zuletzt bearbeitet von einem Moderator:

Oben