Mode ist, was man selbst trägt. Altmodisch ist, was die anderen tragen. – Oscar Wilde
21 Applets
21.1 Applets in der Wiege von Java 

Applets sind kleine Java-Programme, die in einem Webbrowser ablaufen. Sie gehören zu den Java-Programmen der ersten Stunde. Obwohl Applets Java an die Spitze der Programmiersprachen brachten, sind sie heute nur noch selten zu sehen. Es gibt zwar Ausnahmen, wie den Routenplaner http://map24.de/, doch im Allgemeinen sind in öffentlichen Webseiten Applets weitestgehend verschwunden. Der Grund, warum Java-Applets weniger attraktiv für den Konsumenten sind, liegt nicht darin, dass die clientseitige Darstellung und Logik unwichtig geworden ist, sondern vielmehr an anderen Gründen:
- Mit HTML, CSS sowie JavaScript lassen sich heutzutage viele Aufgaben lösen, die 1995 unlösbar waren. Dagegen wirken compilierte Java-Programme wie Raketentechnik. Während bei Java-Applets erst eine JVM gestartet werden muss, was natürlich eine gewisse Zeit kostet, sind JavaScript und HTML sofort bereit. Starke JavaScript-Bibliotheken ermöglichen tolle Effekte und schnelle Verarbeitung und mit performanten JavaScript-Interpreten wie V 8 Und TraceMonkey eine schnelle Verarbeitung.
- Ist Java installiert, steht auf den Rechnern eine moderne und schnelle Java-Laufzeitumgebung für Applets über ein Browser-Plugin zur Verfügung. Möchte der Anwender Applets nutzen, aber kein JVM ist installiert, ist der Bezug langwierig, und viele Megabyte Daten müssen vom Sun-Server geladen werden. Sun arbeitet aktuell an einem System, mit dem nur relevante Bibliotheken bezogen werden, doch die Umsetzung ist noch Zukunftsmusik. (Microsoft lieferte für Windows XP immerhin noch eine eigene JVM aus, obwohl sie auf dem Stand von Java 1.1 stehen blieb. Wegen immer wieder aufkehrender Sicherheitsprobleme sollten Anwender Microsofts Java VM jedoch deinstallieren. Microsoft liefert für Vista kein Java mit aus und empfiehlt daher, Suns JVM zu installieren. [http://windowshelp.microsoft.com/Windows/en-US/Help/59c3a93d-1342-43a6-a01a-f720c7a17ffc1033.mspx] )
- Java ist als allgemeine Programmiersprache entworfen worden, aber nicht als einfache Programmiersprache für grafische Effekte. Hier liegt der Vorteil von Adobe Flash. Mit starken Tools können Designer großartige Oberflächen entwerfen, und die Verbreitung des Flash-Players ist phänomenal [http://www.adobe.com/products/player_census/flashplayer/version_penetration.html] . Zudem erweitert Adobe die Multimedia-Technologie Flash, die Programmiersprache ActionScript sowie die Produktpalette zur Entwicklung kontinuierlich. Möglicherweise ändert sich das, wenn Java-Laufzeitumgebungen stark verbreitet sind und sich Suns neue Programmiersprache JavaFX (http://java.sun.com/javafx/) verbreitet hat.
Hinweis Wir wollen im Folgenden davon ausgehen, dass nicht die Java-Laufzeitumgebung 1.1 von Microsoft installiert ist, sondern ein vollwärtiges Java von Sun. Ist Suns Version von Java installiert, ersetzt es die JVM von Microsoft, und aktuelle Java-Programme lassen sich ausführen. |
21.1.1 (J)Applet und Applikationen 

Bisher haben wir mit Applikationen gearbeitet, die auf der Kommandoebene oder vom Fenstersystem gestartet werden und über unmittelbaren Zugriff auf die Rechnerressourcen verfügen. Von der Programmseite aus gesehen, verfügt eine Applikation über eine main()-Funktion. Bei Applets ist das anders. Sie erweitern stattdessen die Klasse javax.swing.JApplet oder java.applet.Applet und implementieren Callback-Methoden statt einer main()-Funktion. (Hybride Software, die sowohl Applikation als auch Applet ist, ist möglich. Diese Sorte Programm erweitert einfach die Klasse (J)Applet und implementiert die main()-Funktion.)
Ein Applet unterliegt hohen Sicherheitsbestimmungen – eine auf dem Client-Rechner liegende Datei kann zum Beispiel nicht gelöscht werden, und schon der lesende Zugriff ist unzulässig. Vom Sicherheitsstandpunkt aus betrachtet, kontrolliert der SecurityManager die Handlungen der Software.
21.1.2 Das erste Hallo-Applet 

Ein Programm wird leicht zu einem Applet, wenn es die Klasse Applet erweitert. Als Einstieg soll ein kleines Beispiel-Applet dienen.
Listing 21.1 HelloWorldApplet.java
import java.applet.Applet; import java.awt.Graphics; public class HelloWorldApplet extends Applet { /* @Override */ public void paint( Graphics g ) { g.drawString( "Hallo Welt!", 50, 25 ); } }
Die beiden ersten import-Anweisungen binden die notwendigen Informationen über Applets und über Zeichenmethoden ein. Das HelloWorldApplet erweitert die Klasse Applet, denn so wird ein Applet erzeugt. Eine main()-Funktion kommt nicht vor, und es muss eine Methode paint() überschrieben werden, die den Bildschirmaufbau übernimmt. [Das gilt nicht für JApplet. Dort ist das Überschreiben von paint() oder paintComponent() unüblich, da im Allgemeinen eine eigene sich zeichnende Komponente auf das JApplet gesetzt wird.] Der Webbrowser oder Applet-Viewer ruft diese Methode per Callback auf.
Damit der Viewer weiß, was zu machen ist, gibt der HTML-Code einen Hinweis auf die Klasse, die in die Seite eingebettet wird. Dies wird über ein spezielles Tag erreicht.
Listing 21.2 index.html
<html><body> <applet code="HelloWorldApplet.class" width="200" height="100"></applet> </body></html>
Neben dem Namen der Klasse übermittelt das Applet-Tag der virtuellen Maschine auch die Maße des Fensters, in dem das Applet zeichnen kann.
Ab Java 1.1 lassen sich auch gepackte Dateien im Jar-Format übermitteln. Die Angabe der Klasse in der Code-Anweisung sollte keine Leerzeichen beinhalten, da dies dem Communicator und dem Applet-Viewer Probleme bereitet. Die Endung .class ist nicht in jedem Browser erforderlich, wird aber empfohlen.
21.1.3 HTML Converter 

Stößt der Browser auf ein <applet>-Tag, so startet er die Java-Laufzeitumgebung, die das Java-Programm ausführt. Problematisch ist nur, wenn für den Browser kein Java (oder die falsche Version) installiert ist und der Browser keine Ahnung hat, war er mit dem <applet>-Tag anfangen soll. Die Lösung ist, auf das <applet>-Tag zu verzichten und eine browserspezifische Alternative zu verwenden, um dem Benutzer zur Installation einer richtigen JVM zu verhelfen. Der HTML-Code dafür ist recht kryptisch, sodass Sun ein Tool vorsieht, welches das <applet>-Tag ersetzt. Das Hilfsprogramm heißt HTML Converter und befindet sich im bin-Verzeichnis vom JDK. Nach dem Start öffnet sich eine grafische Oberfläche, mit der die HTML-Datei oder ein Ordner mit Applet-referenzierenden HTML-Dateien angegeben wird.
Abbildung 21.1 Der HTML Converter
Aus dem bedächtigen
<html><body> <applet code="HelloWorldApplet.class" width="200" height="100"></applet> </body></html>
erzeugt der Generator anschließend (wenn die Schablonendatei »Erweitert« angegeben ist):
<html><body> <!--"CONVERTED_APPLET"--> <!-- HTML CONVERTER --> <script language="JavaScript" type="text/javascript"><!-- var _info = navigator.userAgent; var _ns = false; var _ns6 = false; var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 &&_info.indexOf("Windows 3.1") < 0); //--></script> <comment> <script language="JavaScript" type="text/javascript"><!-- var _ns = (navigator.appName.indexOf("Netscape") >= 0 &&
((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 &&
java.lang.System.getProperty("os.version").indexOf("3.5") < 0) ||
(_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_
info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) ||
(_info.indexOf("IRIX") > 0))); var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); //--></script> </comment> <script language="JavaScript" type="text/javascript"><!-- if (_ie == true) document.writeln('<object classid="
clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = "200"
HEIGHT = "100" codebase="http://java.sun.com/update/1.6.0/
jinstall-6u30-windows-i586.cab#Version=6,0,0,5"><noembed><xmp>'); else if (_ns == true && _ns6 == false) document.writeln('<embed ' + 'type="application/x-java-applet;version=1.6" \ CODE = "HelloWorldApplet.class" \ WIDTH = "200" \ HEIGHT = "100" ' + 'scriptable=false ' + 'pluginspage="http://java.sun.com/products/plugin/
index.html#download"><noembed><xmp>'); //--></script> <applet CODE = "HelloWorldApplet.class" WIDTH = "200" HEIGHT = "100"></xmp> <PARAM NAME = CODE VALUE = "HelloWorldApplet.class" > <param name="type" value="application/x-java-applet;version=1.6"> <param name="scriptable" value="false"> </applet> </noembed> </embed> </object> <!-- <APPLET CODE = "HelloWorldApplet.class" WIDTH = "200" HEIGHT = "100"> </APPLET> --> <!--"END_CONVERTED_APPLET"--> </body></html>
21.1.4 Fehler in Applets finden 

Werden Applets vom Browser nicht ausgeführt, weil es Fehler in unserem Programm gibt, dann bieten der Internet Explorer und Netscape die Möglichkeit, Log-Informationen anzusehen und so die Fehler genauer zu studieren.
- Internet Explorer Im Menü Extra • Internetoptionen findet sich im Reiter Erweitert ein Eintrag mit dem Namen Microsoft VM. Wir wählen dort das Auswahlfeld Java-Protokollierung aktiviert ebenso wie Java-Konsole an.
- Netscape Im Menü Optionen (Tools) muss der Eintrag Java-Konsole angewählt werden. Es erscheint ein neues Fenster mit den Ausgaben.