2. Woche im Überblick:
Java-Applets - Grundlagen
von Laura Lemay
Die heutige Beliebtheit von Java ist vor allen Dingen der Tatsache zuzuschreiben, daß es javafähige WWW-Browser gibt, die Applets unterstützen. Applets sind kleine Programme, die in einer Web-Seite laufen und benutzt werden können, um dynamische interaktive Web-Designs zu erstellen. Wie ich am Anfang des Buches bereits erwähnt habe, werden Applets in der Java-Sprache geschrieben. Sie können in jedem Browser angezeigt werden, der Java unterstützt, z. B. HotJava von Sun oder Navigator 2.0 von Netscape. Lernen, wie man Applets schreibt, war wahrscheinlich der vorrangige Grund, warum Sie dieses Buch gekauft haben, deshalb wollen wir keine Zeit mehr vergeuden.
Letzte Woche haben Sie die Grundlagen der Java-Sprache gelernt und ein paar kleine Programme, d. h. Java-Anwendungen geschrieben. Diese Woche erstellen und verwenden Sie Applets. Außerdem werden viele der in der Java-Standardbibliothek enthaltenen Klassen diskutiert.
Heute beginnen wir mit folgenden Grundlagen:
Die wesentlichen Unterschiede zwischen Java-Anwendungen und Java-Applets wurden im ersten Teil des Buchs bereits beschrieben und werden hier zum Auffrischen zusammengefaßt.
Java-Anwendungen sind in sich geschlossene Java-Programme, die nur mit dem Java-Interpreter, z. B. von der Befehlszeile aus, ausgeführt werden können. Fast alle bisherigen Beispiele waren Java-Anwendungen, wenn auch sehr einfache.
Java-Applets werden demgegenüber in einem WWW-Browser ausgeführt. Eine Referenz auf ein Applet wird mit einem speziellen HTML-Tag in eine Web-Seite eingebettet. Wenn ein Benutzer, der einen javakundigen Browser verwendet, eine Web-Seite lädt, die ein Applet enthält, wird dieses Applet vom Browser von einem Web-Server heruntergeladen und auf dem lokalen System (auf dem der Browser läuft) ausgeführt.
Da Java-Applets im Java-Browser laufen, haben sie Zugang zu den gleichen Fähigkeiten wie der Browser: Grafiken, Zeichnungen, Bildverarbeitungspakete, Elemente von Benutzeroberflächen, Vernetzung und Ereignishandhabung. Java-Anwendungen können diese Merkmale ebenfalls nutzen, brauchen sie aber nicht. (Sie lernen am 14. Tag, wie Java-Anwendungen geschrieben werden, die appletähnliche Grafiken und Elemente von Benutzeroberflächen nutzen.)
Die Vorteile von Applets gegenüber Anwendungen in bezug auf Grafiken und Benutzeroberflächen werden allerdings davon, was das Applet machen kann, eingeschränkt. Angesichts der Tatsache, daß Java-Applets von irgendwo heruntergeladen und auf einem Client-System ausgeführt werden, sind Einschränkungen notwendig, um zu verhindern, daß ein Applet auf dem Gastsystem Schäden anrichtet bzw. die Sicherheitsregeln verletzt. Ohne diese Einschränkungen könnten Java-Applets Viren oder trojanische Pferde (Programme, die auf den ersten Blick freundlich erscheinen, dem System aber gewisse Schäden zufügen können) enthalten oder absichtlich die Systemsicherheit auf's Spiel setzen. Applets werden folgende Einschränkungen auferlegt:
Darüber hinaus enthält Java selbst verschiedene Sicherheits- und Konsistenzformen, die den Java-Compiler und -Interpreter überwachen, um die unstatthafte Verwendung der Sprache zu verhindern (Sie lernen hierüber am 21. Tag). Diese verschiedenen Einschränkungen und Sicherheitsmerkmale erschweren es einem bösartigen Java-Applet, auf dem Client-System Schäden anzurichten.
Bei fast allen Java-Programmen, die Sie in den bisherigen Lektionen geschrieben haben, handelt es sich um Java-Anwendungen - einfache Programme mit einer main()-Methode, die Objekte erstellt, Instanzvariablen setzt und Methoden ausführt. Heute und in den nächsten Tagen erstellen Sie ausschließlich Applets, deshalb müssen Sie zunächst wissen, wie Applets funktionieren, welche Merkmale sie aufweisen und wo man beginnt, ein Applet zu erstellen. Machen wir uns also ohne Umschweife an die Arbeit.
Um ein Applet zu erstellen, legen Sie eine Subklasse der Klasse Applet an, die sich im Paket java.applet befindet. Die Applet-Klasse beinhaltet die Eigenschaften, die es ermöglichen, daß Ihr Applet nicht nur im Browser funktioniert, sondern auch die Fähigkeiten von AWT nutzt, also Elemente von Benutzeroberflächen beinhaltet, um Maus- und Schlüsselwortereignisse zu handhaben und am Bildschirm zu zeichnen. Ihr Applet kann zwar beliebig viele »Hilfsklassen« haben, jedoch wird die Ausführung des Applets von seiner Hauptklasse ausgelöst. Diese Applet-Ausgangsklasse hat immer eine Unterschrift wie diese:
public class myClass extends java.applet.Applet { ... }
Beachten Sie das Schlüsselwort public. Java setzt voraus, daß eine Applet-Subklasse public deklariert wird. Das trifft wiederum nur auf die Applet-Hauptklasse zu. Jede Hilfsklasse, die Sie anlegen, kann public oder private sein. Am 15. Tag lernen Sie mehr über public, private und andere Formen der Zugriffskontrolle.
Erkennt Java Ihr Applet auf einer Web-Seite, wird Ihre Applet-Ausgangsklasse und die Hilfsklassen, die diese erste Klasse eventuell benutzt, über das Netz geladen. Im Gegensatz zu Anwendungen, bei denen Java die main()-Methode direkt in der Ausgangsklasse aufruft, wenn das Applet geladen wird, erstellt Java eine Instanz dieser Klasse, und alle systembasierten Methoden werden an diese Instanz geschickt. Mehrere Applets auf der gleichen oder unterschiedlichen Seiten, die die gleiche Klasse benutzen, verwenden andere Instanzen, so daß sich jedes Applet auf dem gleichen System eventuell anders verhält.
Um eine grundlegende Java-Anwendung zu erstellen, muß Ihre Klasse die main()-Methode mit einer spezifischen Unterschrift haben. Beim Starten der Anwendung wird main ausgeführt. Sie können von main aus das Verhalten Ihres Programms festlegen. Applets sind ähnlich, aber komplizierter. Applets können viele verschiedene Aktivitäten umfassen, die verschiedenen wichtigen Ereignissen in seinem Lebenszyklus entsprechen, z. B. Initialisieren, Zeichnen oder Mausereignisse. Jede Aktivität hat eine entsprechende Methode. Das heißt, wenn ein Ereignis stattfindet, ruft der Browser oder ein anderes javafähiges Werkzeug diese spezifischen Methoden auf.
Standardmäßig haben diese Aktivitätsmethoden keine Definitionen. Um für solche Ereignisse bestimmte Verhaltensweisen vorzusehen, müssen Sie die jeweilige Methode in Ihrer Applet-Subklasse durch erneutes Definieren überschreiben. Sie brauchen selbstverständlich nicht alle zu überschreiben. Unterschiedliches Applet-Verhalten bedeutet, daß jeweils andere Methoden überschrieben werden müssen.
Sie lernen im weiteren Verlauf dieser Woche, wie verschiedene Methoden überschrieben werden. Vorläufig erhalten Sie einen allgemeinen Überblick über die wichtigsten Methoden in einer Applet-Ausführung: Initialisieren, Starten, Stoppen, Zerstören und Anzeigen.
Initialisieren ist der Vorgang, durch den das Applet geladen wird. Dies kann das Erstellen der benötigten Objekte, das Einrichten eines Anfangszustands, das Laden von Bildern oder Fonts oder das Setzen von Parametern beinhalten. Um für die Initialisierung Ihres Applets Eigenschaften bereitzustellen, überschreiben Sie die init()-Methode:
public void init() { ... }
Nach dem Initialisieren eines Applets wird es gestartet. Ein Applet kann auch gestartet werden, nachdem es zuvor gestoppt wurde. Ein Applet wird beispielsweise gestoppt, wenn der Benutzer eine Verknüpfung zu einer anderen Seite verfolgt. Kehrt der Benutzer auf die vorherige Seite zurück, wird das Applet wieder gestartet. Während seines Lebensyklus kann ein Applet mehrmals gestartet werden, während es nur einmal initialisiert wird. Um für Ihr Applet das Startverhalten festzusetzen, überschreiben Sie die start()-Methode:
public void start() { ... }
Sie können in die start()-Methode Funktionalitäten einbeziehen, z. B. das Starten eines Threads, das Aussenden der entsprechenden Meldungen an Hilfsobjekte oder irgendeine Anweisung, wie das Applet starten soll. Sie lernen am 10. Tag mehr über das Starten von Applets.
Stoppen und Starten gehen Hand in Hand. Ein Applet wird gestoppt, wenn der Benutzer die Seite, in der das Applet ausgeführt wird, verläßt. Standardmäßig läuft ein Applet weiter, auch wenn der Benutzer die Seite verläßt, so daß Systemressourcen verbraucht werden. Durch Überschreiben von stop können Sie die Ausführung des Applets aufheben und erneut starten, wenn das Applet wieder angezeigt wird. Um eine Applet-Ausführung zu stoppen, verwenden Sie die stop()-Methode:
public void stop() { ... }
Das hört sich gewalttätiger an, als es ist. Durch »Zerstören« kann ein Applet hinter sich aufräumen, bevor es oder der Browser beendet wird, z. B. um eventuell laufende Threads zu beenden oder andere laufende Objekte freizugeben. Im allgemeinen brauchen Sie destroy nicht zu überschreiben, sofern Sie nicht bestimmte Ressourcen freigeben müssen, z. B. Threads, die das Applet erzeugt hat. Um einem Applet zu ermöglichen, hinter sich aufzuräumen, überschreiben Sie die destroy()-Methode:
public void destroy() { ... }
»Zeichnen« bestimmt, wie ein Applet etwas am Bildschirm ausgibt. Das kann Text, eine Linie, ein farbiger Hintergrund oder ein Bild sein. Zeichnen kann hunderte Male während des Lebenszyklus eines Applets vorkommen, z. B. einmal nach der Initialisierung des Applets, falls der Browser hinter ein anderes Fenster am Bildschirm gestellt und dann wieder vorgeholt wird, wenn das Browser-Fenster an eine andere Stelle am Bildschirm verschoben wird oder auch wiederholt in Animationen. Um einem Applet das Zeichnen am Bildschirm zu ermöglichen, überschreiben Sie die paint()-Methode. Die paint()-Methode sieht so aus:
public void paint(Graphics g) { ... }
Beachten Sie, daß paint() im Gegensatz zu den anderen in diesem Abschnitt beschriebenen Methoden ein Argument hat: eine Instanz der Klasse Graphics. Dieses Objekt wird vom Browser erstellt und an paint abgegeben, deshalb müssen Sie sich hierüber keine Gedanken machen. Sie müssen aber sicherstellen, daß die Graphics-Klasse (Teil des Pakets java.awt) in Ihren Applet-Code importiert wird. Normalerweise erreichen Sie das mit einer import-Anweisung am Anfang Ihrer Java-Datei:
import java.awt.Graphics;
Am 2. Tag haben Sie ein einfaches Applet namens HelloAgainApplet erstellt (das mit dem großen roten Hello Again). Sie haben das Applet als Beispiel des Anlegens einer Subklasse erstellt und benutzt. Wir gehen den Code für dieses Applet erneut durch, betrachten ihn diesmal aber vor dem Hintergrund dessen, was Sie inzwischen über Applets gelernt haben. Listing 8.1 enthält den Code für dieses Applet.
Listing 8.1: Das Applet Hello Again
1: import java.awt.Graphics; 2: import java.awt.Font; 3: import java.awt.Color; 4: 5: public class HelloAgainApplet extends java.applet.Applet { 6: 7: Font f = new Font("TimesRoman",Font.BOLD,36); 8: 9: public void paint(Graphics g) { 10: g.setFont(f); 11: g.setColor(Color.red); 12: g.drawString("Hello again!", 5, 50); 13: } 14: }
Die eigentliche Arbeit dieses Applets (so wenig das auch ist), findet bei der paint()-Methode statt. Das an die paint()-Methode abgegebene Graphics-Objekt enthält den Grafikstatus, d. h. die aktuellen Merkmale der Zeichnungsoberfläche. Die Zeilen 10 und 11 richten die Standardschrift und -farbe dieses Grafikzustands ein (das Font-Objekt in der Instanzvariablen f und ein Objekt, das die Farbe Rot darstellt, die aus der Color-Klasse stammt).
Zeile 12 zeichnet die Zeichenkette Hello Again! in der angegebenen Schrift und Farbe auf Position 5, 50. Der Punkt 0 für y ist die obere linke Ecke der Zeichenfläche des Applets, wobei das positive y nach unten verläuft, so daß 50 die untere Grenze des Applets ist. Abb. 8.1 zeigt, wie die Begrenzungsbox des Applets und die Zeichenkette am Bildschirm ausgegeben werden.
Abbildung 8.1: Zeichnen eines Applets
Nachdem Sie eine oder mehrere Klassen erstellt haben, die Ihr Applet enthalten, und wie bei jedem anderen Java-Programm in Klassendateien kompiliert haben, müssen Sie mit der HTML-Sprache eine Web-Seite erstellen, die dieses Applet aufnimmt. Für die Einbindung von Applets in Web-Seiten gibt es ein spezielles HTML-Tag. Javafähige Browser verwenden die im Tag enthaltenen Informationen, um die kompilierten Klassendateien zu lokalisieren und das Applet auszuführen. In diesem Abschnitt lernen Sie, wie Java-Applets in eine Web-Seite gestellt werden und wie diese Dateien das Web bedienen.
Um ein Applet in eine Web-Seite einzubinden, benutzen Sie das <APPLET>-Tag. <APPLET> ist eine spezielle Erweiterung von HTML zum Einbinden von Applets in Web-Seiten. Listing 8.2 zeigt ein sehr einfaches Beispiel einer Web-Seite mit einem eingebundenen Applet.
Listing 8.2: Einfache HTML-Seite
1: <HTML> 2: <HEAD> 3: <TITLE>This page has an applet on it</TITLE> 4: </HEAD> 5: <BODY> 6: <P>My second Java applet says: 7: <BR> 8: <APPLET CODE="HelloAgainApplet.class" WIDTH=200 HEIGHT=75> 9: There would be an applet here if your browser 10: supported Java. 11: </APPLET> 12: </BODY> 13: </HTML>
Beachten Sie, daß das <APPLET>-Tag wie das <IMG>-Tag keinen Absatz erzeugt, deshalb sollte es in einem allgemeinen Text-Tag stehen, z. B. <P>, oder in einem Überschriften-Tag (<H1>, <H2> usw.).
Sie haben jetzt eine Klassendatei und eine HTML-Datei, die auf Ihr Applet verweist, und sollten nun in der Lage sein, die HTML-Datei in Ihren javafähigen Browser zu laden (benutzen Sie entweder das Dialogelement Open Local... oder einen Datei-URL, oder bezeichnen Sie den Dateinamen in einer Befehlszeile). Der Browser lädt die HTML-Datei, dann wird Ihre Applet-Klasse geladen und ausgeführt.
Abb. 8.2 zeigt das Applet Hello Again, falls Sie vergessen haben, wie es aussieht.
Abbildung 8.2: Das Applet "Hello Again"
Nachdem Sie nun ein Applet und eine HTML-Datei erstellt und geprüft haben, daß alles auf Ihrem lokalen System richtig funktioniert, folgt der letzte Schritt: Sie stellen das Applet im World-Wide Web allgemein zur Verfügung, so daß jeder mit einem javafähigen Browser das Applet anzeigen kann.
Java-Applets werden von einem Web-Server auf die gleiche Weise bedient wie HTML-Dateien, Bilder und andere Medien. Sie brauchen keine spezielle Serversoftware, um Java-Applets im Web zur Verfügung zu stellen. Sie müssen Ihren Server nicht einmal konfigurieren, um Java-Dateien zu handhaben. Falls Sie über einen Web-Server oder Platz auf einem Web-Server verfügen, brauchen Sie lediglich Ihre HTML darauf abzulegen und Klassendateien für diesen Server wie jede andere Datei zu kompilieren.
Falls Sie nicht über einen Web-Server verfügen, müssen Sie Platz mieten oder selbst einen Server einrichten. (Die Einrichtung und Verwaltung von Web-Servern sowie andere Aspekte des Web-Publizierens sind nicht Gegenstand dieses Buches.)
In seiner einfachsten Form erstellt das <APPLET>-Tag in Verbindung mit code, width und height lediglich einen Platz in der entsprechenden Größe, in dem das Applet geladen und angezeigt wird. Das <APPLET>-Tag beinhaltet aber mehrere Attribute, mit denen Sie Ihr Applet besser in das allgemeine Design Ihrer Web-Seite integrieren können.
Das align-Attribut definiert, wie das Applet auf der Seite ausgerichtet wird. Dieses Attribut kann einen von neun Werten annehmen: LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM und ABSBOTTOM.
Mit ALIGN=LEFT und ALIGN=RIGHT wird das Applet am linken bzw. rechten Rand der Seite ausgerichtet und der gesamte nachfolgende Text fließt innerhalb des Applet-Bereichs nach rechts bzw. links. Soll der gesamte Text nicht gleich ausgerichtet werden, können Sie ein Zeilenende-Tag (<BR>) mit dem CLEAR-Attribut eingeben, dann beginnt eine neue links ausgerichtete Zeile. Das CLEAR-Attribute kann einen von drei Werten haben: Mit CLEAR=LEFT beginnt der Text am linken Rand nach einem Zeilenende, CLEAR-RIGHT bewirkt das gleiche, jedoch rechts ausgerichtet, und mit CLEAR-ALL beginnt der Text an der nächsten Zeile, an der beide Ausrichtungen aufgehoben werden.
Das folgende Beispiel ist ein kleiner HTML-Code, der einen Teil des Applet-Textes am linken Rand ausrichtet. Dann folgt ein Absatzende, so daß der weitere Text in einer neuen Zeile beginnt:
Abb. 8.3 zeigt, wie dieses Applet und der umgebende Text in einem javafähigen Browser aussieht.
Abbildung 8.3: Ein links ausgerichtetes Applet>
Kleinere Applets können in eine einzelne Textzeile eingebunden werden. Hierfür gibt es für align sieben Werte, die bestimmen, wie das Applet vertikal mit dem Text ausgerichtet wird:
Abb. 8.4 zeigt die verschiedenen Ausrichtungsoptionen, wobei die Zeile ein Bild und der Pfeil ein kleines Applet ist.
Abbildung 8.4: Ausrichtungsoptionen für ein Applet
Die Attribute HSPACE und VSPACE werden benutzt, um den Platz zwischen einem Applet und dem umgebenden Text in Pixeln festzulegen. HSPACE bestimmt den horizontalen Abstand links und rechts neben dem Applet. VSPACE bestimmt den vertikalen Abstand oberhalb und unterhalb des Applets. Im folgenden Beispiel eines HTML-Codes wird ein vertikaler Abstand von 10 und ein horizontaler Abstand von 50 festgelegt:
Das Ergebnis sieht in einem typischen Java-Browser etwa so aus wie in Abb. 8.5
Abbildung 8.5: Vertikaler und horizontaler Abstand
CODE dient zur Bezeichnung des Namens der Klassendatei, in der sich das Applet befindet. Wird CODE im <APPLET>-Tag allein benutzt, wird nach der Klassendatei in dem Verzeichnis gesucht, in dem sich die HTML-Datei befindet, die auf das Applet verweist.
Sollen die Klassendateien in einem anderen Verzeichnis als die HTML-Dateien gespeichert werden, müssen Sie dies bestimmen, damit der javafähige Browser weiß, wo er nach diesen Klassendateien suchen soll. Hierfür verwenden Sie CODEBASE. CODE enthält nur den Namen der Klassendatei, während CODEBASE einen anderen Pfadnamen enthält, auf dem sich die Klassen befinden. Haben Sie Ihre Klassendateien beispielsweise in einem Verzeichnis namens /classes gespeichert, in dem sich auch Ihre HTML-Dateien befinden, ist CODEBASE wie folgt:
Bei Java-Anwendungen können Sie Parameter an die main()-Routine weitergeben, indem Sie in der Befehlszeile Argumente verwenden. Sie können diese Argumente dann im Körper der Klasse automatisch analysieren lassen, so daß sich die Anwendung entsprechend den Argumenten verhält.
Bei Applets haben Sie aber keine Befehlszeile. Wie also werden Argumente an ein Applet weitergegeben? Applets können von der HTML-Datei, die das <APPLET>-Tag enthält, durch Verwendung von Applet-Parametern verschiedene Eingaben erhalten. Um Parameter in einem Applet einzurichten und zu handhaben, brauchen Sie zwei Dinge:
Applet-Parameter haben zwei Teile: Einen Namen, den Sie beliebig wählen können, und einen Wert, der den Wert des betreffenden Parameters bestimmt. Sie können beispielsweise die Farbe von Text in einem Applet bestimmen, indem Sie einen Parameter mit dem Namen color und dem Wert red verwenden. Sie können die Geschwindigkeit einer Animation mit einem Parameter namens speed und dem Wert 5 bestimmen.
In der HTML-Datei, in der das Applet eingebettet ist, bezeichnen Sie jeden Parameter mit dem <PARAM>-Tag, das zwei Attribute für den Namen und den Wert hat: name und value. Das <PARAM>-Tag steht zwischen einem öffnenden und schließenden <APPLET>-Tag:
In diesem Beispiel werden zwei Parameter für das Applet MyApplet bestimmt: font mit dem Wert TimesRoman und size mit dem Wert 36.
Diese Parameter werden beim Laden an das Applet weitergereicht. In der init()-Methode Ihres Applets können Sie diese Parameter mit der Methode getParameter berücksichtigen. getParameter nimmt ein Argument an - eine Zeichenkette, die den Namen des Parameters bezeichnet, nach dem Sie suchen. Dann gibt die Methode eine Zeichenkette mit dem entsprechenden Wert aus. (Wie bei Argumenten in Java-Anwendungen werden alle Parameterwerte in Zeichenketten konvertiert.) Um den Wert für den font-Parameter aus der HTML-Datei zu holen, können Sie in die init()-Methode beispielsweise folgende Zeile einfügen:
Falls ein erwarteter Parameter nicht in der HTML-Datei spezifiziert wurde, gibt getParameter Null aus. In den meisten Fällen wird auf einen null-Parameter getestet und ein vernünftiger Standardwert ausgegeben:
Da getParameter Zeichenketten ausgibt, müssen Sie außerdem konvertieren, falls ein Parameter ein anderes Objekt oder ein anderer Typ sein soll. Um den Parameter size aus der gleichen HTML-Datei zu analysieren und ihm eine Ganzzahlvariable namens theSize zuzuweisen, können Sie folgende Zeilen schreiben:
Noch nicht ganz klar? Dann wollen wir ein Beispiel eines Applets schreiben, in der diese Technik angewandt wird. Sie modifizieren HelloAgainApplet, so daß es Hello mit einem bestimmten Namen ausgibt, z. B. »Hello Bill« oder »Hello Alice«. Der Name wird über einen HTML-Parameter an das Applet abgegeben.
Wir beginnen mit der ursprünglichen HelloAgainApplet-Klasse:
Als erstes müssen Sie in diese Klasse Platz für den Namen einfügen. Da dieser Name im gesamten Applet benötigt wird, verwenden wir eine Instanzvariable unmittelbar nach der Variablen für den Font:
Um für den Namen einen Wert zu setzen, müssen Sie den Parameter holen. Die beste Stelle für Applet-Parameter ist innerhalb einer init()-Methode. Die init()-Methode wird ähnlich definiert wie paint() (public, ohne Argumente und void als Ausgabeart). Achten Sie darauf, daß Sie Parameter auch auf einen Null-Wert testen. Wird kein Name angegeben, ist der Standard in diesem Fall »Laura«:
Zum Schluß müssen Sie den Namen noch ändern, damit eine komplette Zeichenkette entsteht, d. h. »Hello « am Anfang und ein Ausrufungszeichen am Ende. Sie könnten dies in der paint-Methode unmittelbar vor der Ausgabe der Zeichenkette am Bildschirm eingeben. Hier erfolgt das nur einmal, während es in paint jedesmal, wenn der Bildschirm neu gezeichnet wird, wiederholt wird. Das heißt, in init() ist es effizienter:
Nun muß nur noch die paint()-Methode geändert werden. Die ursprüngliche drawString-Methode sieht so aus:
Um die neue Zeichenkette, die Sie in der Instanzvariablen name gespeichert haben, zu zeichnen, müssen Sie nur die Variable für die Literal-Zeichenkette ändern:
Listing 8.3 zeigt das endgültige Ergebnis der Klasse MoreHelloApplet. Kompilieren Sie sie, dann haben Sie eine fertige Klassendatei.
Listing 8.3: Die MoreHelloApplet-Klasse
Nun erstellen wir die HTML-Datei, die dieses Applet enthält. Listing 8.4 zeigt eine neue Web-Seite für das MoreHelloApplet-Applet.
Listing 8.4: HTML-Datei für das MoreHelloApplet-Applet
Das nach dem Laden der HTML-Datei produzierte Ergebnis ist in Abb. 8.6 dargestellt.
Abbildung 8.6: Ergebnis von MoreHelloApplet, erster Versuch
Wir versuchen jetzt ein zweites Beispiel. Wie Sie wissen, wird standardmäßig der Name Laura ausgegeben, wenn im Code für MoreHelloApplet kein Name spezifiziert wird. Mit dem Code in Listing 8.5 wird eine HTML-Datei ohne Parameter-Tag für name erstellt.
Listing 8.5: Andere HTML-Datei für das MoreHelloApplet-Applet
Da hier kein Name bereitgestellt wird, verwendet das Applet den Standard und das Ergebnis ist wie erwartet (siehe Abb. 8.7).
Abbildung 8.7: Ergebnis von MoreHelloApplet, zweiter Versuch
Die Java-Sprache wird heute sicherlich für Applets am meisten verwendet. Applets sind komplizierter als viele Java-Anwendungen, weil sie innerhalb einer Web-Seite ausgeführt und gezeichnet werden. Applets bieten leichten Zugang auf die Grafiken, die Benutzeroberfläche und Ereignisse im Web-Browser. Sie haben heute folgende Grundlagen zum Schreiben von Applets gelernt:
F: Im ersten Teil der heutigen Lektion haben Sie gesagt, daß Applets von Web-Servern heruntergeladen und auf dem Client-System ausgeführt werden. Was kann einen Applet-Programmierer davon abhalten, ein Applet zu entwickeln, das alle Dateien auf dem Client-System löscht oder dessen Sicherheit umgeht?
A: Sie erinnern sich, daß Java-Applets spezielle Einschränkungen haben, die böswilliges Verhalten verhindern. Da Java-Applets z. B. auf dem Client-System keine Dateien lesen oder beschreiben können, haben sie auch keinen Zugang zu den Daten dieser Dateien und können diese Dateien nicht löschen. Da sie auf dem Client-System außerdem keine Programme ausführen können, besteht z. B. keine Möglichkeit, in die Mail-Dateien oder anderswo im Netz einzudringen.
Darüber hinaus wird die Umgehung dieser Einschränkungen durch die Java-Architektur an sich erschwert. Die Sprache selbst, der Java-Compiler und der Java-Interpreter haben Kontrollen, um sicherzustellen, daß niemand versucht, zerstörerischen Code einfließen zu lassen oder andere Spielchen zu treiben. Sie lernen am Ende dieses Buches mehr über diese Einschränkungen.
Selbstverständlich kann kein System für sich beanspruchen, absolut sicher zu sein. Die Tatsache, daß Java-Applets auf Client-Systemen laufen, macht sie natürlich besonders verdächtig.
F: Wenn ich keine Dateien lesen und schreiben oder Programme auf den Systemen, auf denen das Applet benutzt wird, ausführen kann, heißt das im Grunde doch, daß ich außer einfachen Animationen oder poppigen Grafiken nichts machen kann? Wie kann ich Zustände in einem Applet speichern? Wie kann ich z.B. eine Textverarbeitung oder eine Tabellenkalkulation als Java-Applet erstellen?
A: Während die einen die Sicherheitseinschränkungen von Java schätzen, sind andere aus dem gleichen Grund überzeugt, daß die Fähigkeiten der Sprache dadurch eingeschränkt werden. Java-Applets sind gerade wegen dieser Sicherheitseinschränkungen begrenzt. Doch angesichts der zahlreichen Möglichkeiten eines Mißbrauchs finde ich, daß es besser ist, der Sicherheit vor Programmiervielfalt den Vorzug zu geben.
Bedenken Sie auch, daß Java-Anwendungen nicht den Einschränkungen von Java-Applets unterliegen. Da sie aber in Bytecode kompiliert werden, sind sie auf alle Plattformen portierbar. Eventuell schreiben Sie anstelle eines Applets eine Java-Anwendung, um alle Ihre kreativen Vorstellungen zu realisieren.
F: Ich habe eine ältere Version von HotJava. Ich habe alle Beispiele dieser Lektion nachvollzogen, kann aber die Applets in meinem HotJava nicht lesen. Woran liegt das?
A: Sicherlich haben Sie eine Alpha-Version von HotJava. Bedenken Sie, daß im Java-API beträchtliche Änderungen durchgeführt wurden und daß viele Java-Applets zwischen der Alpha- und Beta-Version geschrieben wurden. Diese Änderungen führen dazu, daß Browser, die Alpha-Applets unterstützen, keine Beta-Applets lesen können, und umgekehrt. Sogar die HTML-Tags sind unterschiedlich, so daß ein älterer Browser neue Applets einfach ignoriert.
Bis Sie dieses Buch durchgearbeitet haben, gibt es bestimmt eine neue Version von HotJava, die Beta unterstützt. Falls nicht, verwenden Sie Netscape 2.0 oder den JDK-Appletviewer, um Beta-Applets anzuzeigen.
F: Ich habe auf der Seite über das < APPLET>-Tag bemerkt, daß es auch ein NAME-Attribut gibt. Warum wurde es hier nicht erwähnt?
A: NAME wird benutzt, wenn sich auf einer Seite mehrere Applets befinden, die miteinander kommunizieren müssen. Sie lernen dieses Thema am 12. Tag.
F: Ich habe ein Applet, das Parameter holt, und eine HTML-Datei, die diese Parameter weitergibt. Beim Ausführen meines Applets erhalten ich aber nur Nullwerte. Woran liegt das?
A: Stimmen die Namen Ihrer Parameter (im NAME-Attribute) genau mit denen überein, die Sie zum Prüfen von getParameter verwenden? Sie müssen absolut übereinstimmen, auch hinsichtlich der Groß- und Kleinschreibung. Achten Sie darauf, daß Ihre <PARAM>-Tags innerhalb von öffnenden und schließenden <APPLET>-Tags stehen und daß kein Name falsch geschrieben wurde.
Java-Applets im Web bereitstellen
Mehr über das <APPLET>-Tag
Ausrichten
<P><APPLET CODE="HelloAgainApplet" WIDTH=300 HEIGHT=200
ALIGN=LEFT>Hello Again!</APPLET>
To the left of this paragraph is an applet. It's a
simple, unassuming applet, in which a small string is
printed in red type, set in 36 point Times bold.
<BR CLEAR=ALL>
<P>In the next part of the page, we demonstrate how under certain conditions,
styrofoam peanuts can be used as a healthy snack.
HSPACE und VSPACE
<P><APPLET CODE="HelloAgainApplet" WIDTH=300 HEIGHT=200
ALIGN=LEFT VSPACE=10 HSPACE=50>Hello Again!</APPLET>
To the left of this paragraph is an applet. It's a
simple, unassuming applet, in which a small string is
printed in red type, set in 36 point Times bold.
<BR CLEAR=ALL>
<P>In the next part of the page, we demonstrate how
under certain conditions, styrofoam peanuts can be
used as a healthy snack.
CODE und CODEBASE
<APPLET CODE="myclass.class" CODEBASE="classes"
WIDTH=100 HEIGHT=100>
Parameter an Applets weitergeben
<APPLET CODE="MyApplet.class" WIDTH=100 HEIGHT=100>
<PARAM NAME=font VALUE="TimesRoman">
<PARAM NAME=size VALUE="36">
A Java applet appears here.</APPLET>
String theFontName = getParameter("font");
if (theFontName == null)
theFontName = "Courier"
int theSize;
String s = getParameter("size");
if (s == null)
theSize = 12;
else theSize = Integer.parseInt(s);
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
public class MoreHelloApplet extends java.applet.Applet {
Font f = new Font("TimesRoman",Font.BOLD,36);
public void paint(Graphics g) {
g.setFont(f);
g.setColor(Color.red);
g.drawString("HelloAgain!", 5, 50);
}
}
String name;
public void init() {
this.name = getParameter("name");
if (this.name == null)
this.name = "Laura";
}
this.name = "Hello " + this.name + "!";
g.drawString("Hello Again!", 5, 50);
g.drawString(this.name, 5, 50);
1: import java.awt.Graphics;
2: import java.awt.Font;
3: import java.awt.Color;
4:
5: public class MoreHelloApplet extends java.applet.Applet {
6:
7: Font f = new Font("TimesRoman",Font.BOLD,36);
8: String name;
9:
10: public void init() {
11: this.name = getParameter("name");
12: if (this.name == null)
13: this.name = "Laura";
14:
15: this.name = "Hello " + this.name + "!";
16: }
17:
18: public void paint(Graphics g) {
19: g.setFont(f);
20: g.setColor(Color.red);
21: g.drawString(this.name, 5, 50);
22: }
23: }
1: <HTML>
2: <HEAD>
3: <TITLE>Hello!</TITLE>
4: </HEAD>
5: <BODY>
6: <P>
7: <APPLET CODE="MoreHelloApplet.class" WIDTH=300 HEIGHt=50>
8: <PARAM NAME=name VALUE="Bonzo">
9: Hello to whoever you are!
10: </APPLET>
11: </BODY>
12: </HTML>
1: <HTML>
2: <HEAD>
3: <TITLE>Hello!</TITLE>
4: </HEAD>
5: <BODY>
6: <P>
7: <APPLET CODE="MoreHelloApplet.class" WIDTH=300 HEIGHt=50>
8: Hello to whoever you are!
9: </APPLET>
10: </BODY>
11: </HTML>
Zusammenfassung
Fragen und Antworten
Buch- und Software- Verlag GmbH
Alle Rechte vorbehalten. All rights reserved.