Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 3. Auflage
 <<    <     >    >>   API  Kapitel 39 - Applets I

39.1 Die Architektur eines Applets



39.1.1 Grundlagen

Für viele Leser, die Java lernen wollen, steht die Entwicklung von Applets im Vordergrund und ist der Hauptgrund für die Beschäftigung mit der Sprache. In letzter Zeit ist allerdings ein Trend zu beobachten, bei dem Java zunehmend auch als Sprache für die Anwendungsentwicklung an Bedeutung gewinnt. Daß man mit Java auch Web-Pages verschönern kann, ist dabei ein angenehmer Nebeneffekt.

Tatsächlich unterscheiden sich Applets und Applikationen gar nicht so stark voneinander, wie man vermuten könnte. Bis auf wenige Ausnahmen werden sie mit denselben Werkzeugen und Techniken konstruiert. Vereinfacht kann man sagen, daß Java-Applikationen eigenständige Programme sind, die zur Ausführung den Stand-Alone-Java-Interpreter benötigen, während Java-Applets aus HTML-Seiten heraus aufgerufen werden und zur Ausführung einen Web-Browser benötigen.

Die wichtigsten Unterschiede kann man in einer kurzen Liste zusammenfassen:

Dieses Kapitel erklärt die Grundlagen der Applet-Programmierung und erläutert die Einbindung von Applets in HTML-Dokumente. Es baut dabei auf vielen der in den Kapiteln 23 bis 34 des Buches vermittelten AWT-Features auf, ohne deren Kenntnis die Applet-Programmierung kaum möglich wäre.

39.1.2 Die Klasse java.awt.Applet

Wie schon erwähnt, wird das Hauptprogramm eines Applets aus der Klasse Applet des Pakets java.applet abgeleitet. Applet ist nun aber keine der abstrakten Basisklassen der Java-Klassenbibliothek, wie man es vielleicht erwarten würde, sondern eine konkrete Grafikklasse am Ende der Klassenhierarchie. Applet ist aus der Klasse Panel abgeleitet, diese aus Container und Container aus Component. Abbildung 39.1 stellt die Ableitungshierarchie schematisch dar:

Abbildung 39.1: Ableitungsbaum der Applet-Klasse

Ein Applet ist also ein rechteckiges Bildschirmelement, das eine Größe und Position hat, Ereignisse empfangen kann und in der Lage ist, grafische Ausgaben vorzunehmen. Tatsächlich kommt dies dem Anspruch eines Applets, ein eigenständiges Programm zu sein, das innerhalb eines fensterartigen Ausschnitts in einem grafikfähigen Web-Browser läuft, sehr entgegen. Durch die Vererbungshierarchie erbt ein Applet bereits von seinen Vaterklassen einen großen Teil der Fähigkeiten, die es zur Ausführung benötigt. Die über die Fähigkeiten von Container, Component und Panel hinaus erforderliche Funktionalität, die benötigt wird, um ein Objekt der Klasse Applet als Hauptmodul eines eigenständigen Programms laufen zu lassen, wird von der Klasse Applet selbst zur Verfügung gestellt.

39.1.3 Initialisierung und Endebehandlung

Die Kommunikation zwischen einem Applet und seinem Browser läuft auf verschiedenen Ebenen ab. Nach dem Laden wird das Applet zunächst instanziert und dann initialisiert. Anschließend wird es gestartet, erhält GUI-Events und wird irgendwann wieder gestoppt. Schließlich wird das Applet vom Browser nicht mehr benötigt und zerstört.

Zu jedem dieser Schritte gibt es eine korrespondierende Methode, die vor dem entsprechenden Statuswechsel aufgerufen wird. Die aus Applet abgeleitete Klasse ist dafür verantwortlich, diese Methoden zu überlagern und mit der erforderlichen Funktionalität auszustatten.

Instanzierung des Applets

Bevor ein Applet aktiv werden kann, muß der Browser zunächst ein Objekt der abgeleiteten Applet-Klasse instanzieren. Hierzu ruft er den parameterlosen Default-Konstruktor der Klasse auf:

public Applet()
java.applet.Applet

Üblicherweise wird dieser in der abgeleiteten Klasse nicht überlagert, sondern von Applet geerbt. Notwendige Initialisierungen von Membervariablen werden später erledigt.

Initialisierung des Applets

Nach der Instanzierung ruft der Browser die Methode init auf, um dem Applet die Möglichkeit zu geben, Initialisierungen vorzunehmen:

public void init()
java.applet.Applet

init wird während der Lebensdauer eines Applets genau einmal aufgerufen, nachdem die Klassendatei geladen und das Applet instanziert wurde. Innerhalb von init können Membervariablen initialisiert, Images oder Fonts geladen oder Parameter ausgewertet werden.

 Hinweis 

Starten des Applets

Nachdem die Initialisierung abgeschlossen ist, wird die Methode start aufgerufen, um die Ausführung des Applets zu starten:

public void start()
java.applet.Applet

Im Gegensatz zur Initialisierung kann das Starten eines Applets mehrfach erfolgen. Wenn der Browser eine andere Web-Seite lädt, wird das Applet nicht komplett zerstört, sondern lediglich gestoppt (siehe nächsten Abschnitt). Bei erneutem Aufruf der Seite wird es dann wieder gestartet und die Methode start erneut aufgerufen.

 Hinweis 

Stoppen des Applets

Durch Aufrufen der Methode stop zeigt der Browser dem Applet an, daß es gestoppt werden soll:

public void stop()
java.applet.Applet

Wie erwähnt, geschieht dies immer dann, wenn eine andere Seite geladen wird. Während der Lebensdauer eines Applets können die Methoden start und stop also mehrfach aufgerufen werden. Keinesfalls darf ein Applet also innerhalb von stop irgendwelche endgültigen Aufräumarbeiten durchführen und Ressourcen entfernen, die es bei einem nachträglichen Neustart wieder benötigen würde.

Zerstören des Applets

Wenn ein Applet ganz bestimmt nicht mehr gebraucht wird (z.B. weil der Browser beendet wird), ruft der Browser die Methode destroy auf:

public void destroy()
java.applet.Applet

Diese kann überlagert werden, um Aufräumarbeiten zu erledigen, die erforderlich sind, wenn das Applet nicht mehr verwendet wird. Eine typische Anwendung von destroy besteht beispielsweise darin, einen Thread zu zerstören, der bei der Initialisierung eines Applets angelegt wurde.

39.1.4 Weitere Methoden der Klasse Applet

Methoden zum Nachrichtentransfer

Neben diesen vier speziellen Methoden kann ein Applet alle Nachrichten erhalten, die an ein Component-Objekt versendet werden. Hierzu zählen Mouse-, MouseMotion-, Key-, Focus- und Component-Events ebenso wie die Aufforderung an das Applet, seine Client-Area neu zu zeichnen. Bezüglich Reaktion auf die Events und die Registrierung und Programmierung geeigneter Listener-Klassen verhält sich ein Applet genauso wie jedes andere Fenster. In Kapitel 28 und Kapitel 29 wurden die möglichen Ereignisse und die Reaktion des Programms darauf vorgestellt.

showStatus

Mit der Methode showStatus kann das Applet einen Text in die Statuszeile des HTML-Browsers schreiben, der das Applet ausführt:

public void showStatus(String msg)
java.applet.Applet

Das folgende Beispiel zeigt ein sehr einfaches Applet, das den Text »Hello, world« auf dem Bildschirm ausgibt und in die Statuszeile des Browsers schreibt:

001 /* Listing3901.java */
002 
003 import java.awt.*;
004 import java.applet.*;
005 
006 public class Listing3901
007 extends Applet
008 {
009   public void paint(Graphics g)
010   {
011     showStatus("Hello, world");
012     g.drawString("Hello, world",10,50);
013   }
014 }
Listing3901.java
Listing 39.1: Ein einfaches Applet

getParameterInfo

Die Klasse Applet besitzt eine Methode getParameterInfo, die in abgeleiteten Klassen überlagert werden sollte:

public String[][] getParameterInfo()
java.applet.Applet

getParameterInfo kann vom Browser aufgerufen werden, um Informationen über die vom Applet akzeptierten Parameter zu erhalten. Der Rückgabewert von getParameterInfo ist ein zweidimensionales Array von Strings. Jedes Element des Arrays beschreibt einen Parameter des Applets durch ein Subarray mit drei Elementen. Das erste Element gibt den Namen des Parameters an, das zweite seinen Typ und das dritte eine textuelle Beschreibung des Parameters. Die Informationen sollten so gestaltet sein, daß sie für menschliche Benutzer verständlich sind; eine programmgesteuerte Verwendung ist eigentlich nicht vorgesehen.

Das nachfolgende Listing zeigt eine beispielhafte Implementierung der Methode getParameterInfo für das Applet in Listing 39.5:

001 public String[][] getParameterInfo()
002 {
003   String[][] ret = {
004     {"redwidth","int","Breite eines roten Segments"},
005     {"whitewidth","int","Breite eines weissen Segments"}
006   };
007   return ret;
008 }
Listing 39.2: Verwendung von getParameterInfo

getAppletInfo

Ähnlich der Methode getParameterInfo gibt es eine Methode getAppletInfo, mit der die Anwendung Informationen über das Applet zur Verfügung stellen sollte:

public String getAppletInfo()
java.applet.Applet

Die Sprachspezifikation gibt an, daß hier ein String zurückgegeben werden sollte, der Angaben zum Applet selbst, zur aktuellen Version und zum Autor des Applets macht. Eine beispielhafte Implementierung könnte so aussehen:

001 public String getAppletInfo()
002 {
003   return "AppletBeispiel Ver. 1.0 (C) 1997-99 Guido Krueger";
004 }
Listing 39.3: Die Methode getAppletInfo


 Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0.1
 <<    <     >    >>   API  © 1998-2003 Guido Krüger, http://www.javabuch.de