Java-applets
JAVA -
APPLET’s und APPLIKATIONEN
1 Einleitung
In Java kann man zwei unterschiedliche Arten von Programmen erstellen:
Applets und Applikationen.
Applets sind Java-Programme, die in HTML-Seiten eingebunden werden können. Der Interpreter ist hierbei im Appletviewer bzw. im Browser integriert.
Im Gegensatz dazu stellen Applikationen Stand-Alone-Anwendungen dar. Eine Applikation muß direkt von der Konsole mit Hilfe des Java-Interpreters java gestartet werden.
Sowohl Applets als auch Applikationen muß man kompilieren, bevor sie gestartet werden können. Hierfür steht das Tool javac zur Verfügung.
Um eine Java-Quelldatei zu kompilieren, ruft man javac mit der Quelldatei als Argument auf: javac <programmname>.java
Die Quelldatei muß immer die Endung .java besitzen. Sie wird in eine Datei mit der Endung .
class umgewandelt, die den Bytecode, der von der virtuellen Maschine ausgeführt werden kann, enthält. Wie der von javac erzeugte Bytecode gestartet wird, hängt davon ab, ob er als Applet oder als Applikation ausgeführt werden soll.
2 Applikationen
Eine Applikation ist ein Programm, das genau wie ein Programm in einer anderen Programmiersprache wie Pascal oder C auf dem lokalen Rechner gestartet wird.
Die Hauptklasse einer Applikation muß die Methode
Public static void main (String args[])
implementieren. Startet man das Programm mit
Java <programmname>
wird als erstes diese Methode aufgerufen (analog zu main in C). Beim Aufruf von java darf die Endung der Klassendatei .
class nicht mit angegeben werden. Da main als static vereinbart ist, kann man aus main heraus nur auf Variablen und Methoden direkt zugreifen, die ebenfalls static sind.
Statische Methoden können aufgerufen werden, ohne eine Instanz der Klasse anlegen zu müssen, in der sie deklariert sind.
Das folgende Listing zeigt die kleinste denkbare Java-Applikation mit dem Name HalloJava. Ihre einzige Aufgabe ist es, nach dem Start eine Meldung innerhalb der Kommandozeile auszugeben und gleich darauf zu terminieren. Trotzdem enthält das Programm einige wichtige Grundelemente, die man in jeder Java-Applikation findet.
// HalloJava aus der Datei HalloJava.java
class HalloJava
{
public static void main (String args[])
{
System.out.println (“Hallo Java“);
}
}
3 Applets
Das Besondere an Applets ist, daß sie in HTML-Seiten eingebunden werden können. Dadurch hat man die Möglichkeit, Seiten ansprechender (z.B.
durch Animation) und funktioneller (z.B. durch Integration kompletter Anwendungen) zu gestalten.
Wurde eine Anwendung in Java als Applet geschrieben und ins Netz gelegt, dann kann jeder, der Zugriff auf das Netz besitzt, diese Anwendung benutzen. Es ist nicht mehr notwendig die Software auf dem lokalen Rechner zu installieren.
Die Anwendung wird innerhalb des Browsers oder Appletviewers unabhängig vom System des Benutzers ausgeführt.
Alle Applet-spezifischen Klassen sind im Paket java.applet enthalten.
Das folgende Listing zeigt ein kleines Java-Applet:
Import java.awt.*; // Panel importieren
Import java.applet.
* // Applet importieren
Public class first extends Applet
{
public void paint (Graphics g)
{
// Rahmen zeichnen
g.drawRect (0, 0, size().width-1, size().height-1);
// Text ausgeben
g.drawString (“Mein erstes Java-Applet“, 5, 15);
}
}
3.1 Einbinden von Applets
Die Schnittstelle zwischen der HTML-Seite und dem Applet ist das Applet-Tag.
Das Applet-Tag wird genau wie die anderen Tags in einer HTML-Seite verwendet.
<APPLET CODE=helloworld.class WIDTH=200 HEIGHT=100>
</APPLET>
Dieses Tag bindet ein Applet, dessen Hauptklasse den Namen helloworld.class trägt, in eine HTML-Seite ein. Das Applet wird mit der Breite 200 und der Höhe 100 (in Pixel) initialisiert. Diese drei Attribute müssen immer angegeben werden.
Außer den obigen drei erforderlichen Attributen besitzt das Applet-Tag noch eine Vielzahl von Attributen, die optional angegeben werden können.
Nachfolgend sind die Attribute im einzelnen beschrieben.
CODE
Gibt die Datei an, in der die Hauptklasse des Applets abgelegt ist. Die angegebene Datei wird im Verzeichnis der HTML-Seite gesucht.
WIDTH
Gibt die Breite in Pixel an, mit der das Applet initialisiert wird.
HEIGHT
Gibt die Höhe in Pixel an, mit der das Applet initialisiert wird.
CODEBASE
Dient dazu, den Pfad zum Applet anzugeben, falls sich das Applet nicht im Verzeichnis der HTML-Seite befindet. Die Angabe des Pfades kann relativ oder absolut sein.
ALT
Wird verwendet, um bei Textbrowsern an Stelle des Applets alternativen Text anzuzeigen.
NAME
Ist wichtig, wenn mehrere Applets auf einer HTML-Seite miteinander kommunizieren sollen. Mit NAME kann dem Applet ein logischer Name zugewiesen werden, über den es von anderen Applets auf derselben Seite identifiziert werden kann.
ALIGN
Sollte ein Wert zugewiesen werden, wenn das Applet innerhalb der Seite auf eine bestimmte Art und Weise ausgerichtet werden soll.
Gültige Werte sind RIGHT, LEFT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASEMIDLE, BOTTOM und ABSBOTTOM.
Zusätzlich können einem Applet von einer HTML-Seite aus beliebig viele Parameter übergeben werden. Dies wird mit dem PARAM-Tag realisiert. Das PARAM-Tag wird innerhalb der APPLET-Umgebung der HTML-Seite plaziert:
<APPLET CODE=helloworld.class WIDTH=200 HEIGHT=100>
<PARAM NAME=text VALUE=“Hello World!“>
</APPLET>
PARAM besitzt zwei Attribute:
NAME
Nimmt den logischen Namen auf, unter dem ein Parameter an das Applet übergeben wird.
VALUE
Enthält den eigentlichen Wert, der an das Applet übergeben werden soll.
VALUE wird immer als String übergeben.
Die Darstellung von Applets ist nicht jedem Browser möglich. Manche ältere Browser besitzen nämlich keinen eingebauten Java-Interpreter und können das APPLET-Tag nicht auswerten. Ein Browser, der das APPLET-Tag nicht kennt, überliest es einfach. Es ist jedoch möglich, in solchen Browsern anstelle des Applets alternative HTML-Elemente anzuzeigen (z.B.
Texte oder Bilder).
Hierfür muß man einfach den gewünschten HTML-Code in die APPLET-Umgebung einfügen:
<APPLET CODE=helloworld.class WIDTH=200 HEIGHT=100>
Sorry, your Browser doesn’t know the APPLET-Tag
</APPLET>
Kennt ein Browser, der auf eine Seite mit obigem Code stößt, das APPLET-Tag, wird das Applet angezeigt, andernfalls erscheint „Sorry, your Browser doesn’t know the APPLET-Tag“.
Ein Browser, der das APPLET-Tag kennt, interpretiert innerhalb einer APPLET-Umgebung nur das PARAM-Tag. Deshalb wird in diesem Fall „Sorry, your Browser doesn’t know the APPLET-Tag“ überlesen und nur das Applet angezeigt.
3.
2 Einlesen von Parametern
Das Einlesen des Parameters erfolgt mit Hilfe der Methode getParameter(String). Der an getParameter übegebene String enthält den Namen, der auf der HTML-Seite für den Parameter festgelegt wurde. Ist der Name richtig angegeben, liefert getParameter den entsprechenden Wert zurück.
Import java.applet.Applet;
Public class ParamDemo extends Applet {
String text;
Public void init() {
//Festlegen von Alternativ-Text, falls der
//Parameter nicht angegeben ist
if ((text = getParameter(“text“)) == null)
text = “Kein passender Parameter gefunden!“;
System.
out.println (text);
}
}
Also müßte das Applet den Text “Hello World!“ ausgeben. Wird ein Applet parametrisiert, kann es universell eingesetzt werden. Das Applet besitzt so eine Schnittstelle zur HTML-Seite, über die die Eigenschaften des Applets von außen verändert werden können. Man muß also nicht den Code des Applets modifizieren und neu kompilieren, um dem Applet neue Eigenschaften zu verleihen.
Ein Applet, das einen numerischen Wert als Parameter benötigt, muß den eingelesenen String in den gewünschten Zahlentyp umwandeln.
Folgende Zeilen übernehmen das Einlesen eines Int-Wertes:
String numberString;
Int Zahl = 0;
Number = 0;
If ((numberString = getParameter(“text“)) != null)
Zahl = Integer.parseInt(numberString);
Wird innerhalb eines Applets ein Parameter angefordert, der nicht auf der HTML-Seite definiert wurde, liefert getParameter den Wert null. Es ist z.B. denkbar, daß die Position eine Textes in das Applet eingelesen werden soll. Ist die Position aber nicht auf der HTML-Seite angegeben, dann kann das Applet diesen Parameter nicht verwenden.
Deshalb sollte man für Parameter, die für die richtige Funktion des Applets notwendig sind, innerhalb des Applets alternative Werte festlegen, die verwendet werden, falls der Parameter nicht angegeben ist.
Im obigen Beispiel wird dies folgendermaßen gemacht:
if ((text = getParameter(“text“)) == null)
text = “Kein passender Parameter gefunden!“;
Wenn kein Parameter mit NAME=text angegeben wird, erhält die Variable, die diesen Wert eigentlich aufnehmen soll (text), den Wert “Kein passender Parameter gefunden“ zugewiesen.
Mit der Methode getParameter kann man allerdings auch auf die, mit dem APPLET-Tag angegebenen Attribute zugreifen. Hierzu wird getParameter einfach der Name des Attributs übergeben. Auf diese Weise ist es z.B.
möglich den Namen eines Applets zu erfragen:
String name = getParameter(“NAME“);
3.3 Lebenszyklus eines Applets
Jedes Applet besitzt vier Methoden die seinen Lebenszyklus bestimmen. Der Aufruf dieser Methoden erfolgt bei bestimmten Benutzeraktionen automatisch vom Browser.
Diese Methoden sind:
Init ()
Wird immer aufgerufen, wenn das Applet initialisiert wird. Dies geschieht sofort, nachdem es geladen ist.
Start ()
Wird nach der Initialisierung eines Applets ausgeführt.
Außerdem findet ein Aufruf dieser Methode immer dann statt, wenn der Browser bzw. der Appletviewer von der Icon-Darstellung wieder auf Normalgröße gebracht wird. Bei Browsern wird start() auch dann aufgerufen, wenn eine Seite, auf der sich ein Applet befindet, zum wiederholten Male geladen wird.
Stop ()
Ist das Gegenstück zu start(). Ein Aufruf erfolgt, wenn der Browser bzw. der Appletviewer zum Icon verkleinert wird oder wenn eine HTML-Seite mit eingebundenem Applet in einem Browser verlassen wird.
Destroy ()
Wird immer aufgerufen, wenn das Applet zerstört wird. Die Zerstörung tritt z.B. ein, wenn es aus dem Browser entfernt wird. Im Laufe eine WWW-Sitzung werden u.U.
viele Applets geladen. Dadurch muß eine große Speichermenge zur Verfügung stehen. Damit der Umfang des belegten Speichers nicht ständig steigt, schaffen Browser Abhilfe, indem bei übermäßiger Speicherbelastung alte Applets entfernt werden. Wird ein Applet erneut geladen, durchläuft es den Initialisierungsvorgang von neuem.
Standardmäßig enthalten die obigen Methoden keinen Code. Man kann sie in geeigneter Weise überschreiben, um seinem Applet die gewünschte Funktionalität zu verleihen.
Init() wird bei Applets meistens implementiert, da diese Prozedur nach dem Laden des Applets zuerst ausgeführt wird und Initialisierungsaufgaben übernimmt. Die anderen Methoden können nach Bedarf überschrieben werden.
Es folgt ein Beispiel, in dem die Methoden init, start und stop überladen wurden. Das Programm, spielt den Inhalt einen Sound-Datei ab:
Import java.applet.*;
Import java.
awt.*;
Public class SoundDemo extends Applet {
AudioClip sound;
Public void init() { //Laden der Datei sound.au
Sound = getAudioClip(getCodeBase(), “sound.au“);
{
public void start() { //Abspielen des Sounds
sound.loop();
}
public void stop() { //Stoppen des Sounds
sound.stop();
}
}
Der Lebenszyklus eines Applets:Laden eines Applets
Init()
Applet
Start()
Destroy()
Stop()
Zurückkehren zu einer Seite, Deiconifizierung
Verwerfen des Applets
Laden einer neuen Seite, Iconifizierung
4 Applets mit Applikationen vereinigt
Generell ist es nicht erforderlich, Applets von Applikationen zu trennen.
Ein Applet kann gleichzeitig eine Applikation sein und umgekehrt. Die Unterscheidung ist lediglich von den Methoden abhängig, die implementiert werden und von der Klasse, die der Hauptklasse vererbt wird. Wenn die Anforderungen eines Applets und einer Applikation erfüllt sind, kann man das Programm sowohl in einem Browser, als auch von der Konsole aus starten.
Hierzu muß das Programm
die Methode main implementieren.
von der Klasse java.applet.
Applet abgeleitet sein.
Die Parameter, die ein Applet von der HTML-Seite übergeben bekommt, können bei einer Applikation gegebenenfalls durch die Kommandozeile übergeben werden, um auch eine einheitliche Schnittstelle des Programmes nach außen definieren zu können.
Import java.applet.Applet;
Public class AppletApplicationDemo extends Applet {
//Aufruf beim Start als Applikation
public static void main (String args[]) {
//Zuerst wird eine Instanz der Klasse angelegt und
//anschließend der Name der Programm-Art ausgegeben
AppletApplicationDemo myDemo = New AppletApplicationDemo();
MyDemo.whoamI (“Applikation“);
}
//Aufruf beim Start als Applet
public void init() {
//Hier ist ein direkter Aufruf von ‘whoamI‘ möglich
whoamI (“Applet“);
}
public void whoamI (String program) {
//Ausgabe der Programm-Art
System.
out.println(“Sie haben ein(e)“+ program +“ gestartet!“);
}
}
Startet man das Programm von der Konsole aus, wird in main eine Instanz der Hauptklasse erzeugt. Die Objektvariable dieser Instanz befindet sich innerhalb von main. Somit kann über diese Instanz auf die Methoden und Felder der Klasse, in der sich main befindet zugegriffen werden.
Ist diese Instanz angelegt, wird whoamI, mit dem Argument Applikation aufgerufen. Dort wird der Text auf der Standardausgabe ausgegeben.
Beim Start als Applet ist der Ablauf analog. In diesem Fall muß jedoch nicht erst eine Instanz der eigenen Klasse angelegt werden und whoamI wird der Text Applet übergeben. Auf diese Weise wird sichergestellt, daß man anhand des ausgegebenen Textes immer sagen kann, wie das Programm gestartet wurde. In diesem Fall übernimmt init(), die Rolle, die main in einer Applikation besitzt.
5 Unterschiede zwischen Applets und Applikationen
Dateizugriffe sind in Java nur innerhalb von Applikationen möglich. Applets sind dazu gedacht, in HTML-Seiten eingebaut und auf dem Client-Host, d.
h. auf dem Rechner, auf dem der Browser läuft, ausgeführt zu werden. Könnte ein Applet, das über das Netz geladen wurde auf Dateien des Client-Hosts zugreifen, dann hätte es die Möglichkeit, sämtliche Informationen, die das betreffende System bietet, dem Applet-Host zur Verfügung zu stellen. Ist der Client-Host nicht gleich dem Applet-Host, sollte dies jedoch nicht möglich sein.
Standardmäßig verwenden Applikationen das Fließ-Layout. Für Applets ist allerdings das Rahmen-Layout zu verwenden.
Alle Applets sind von der Klasse Applet abgeleitet.
Die Aufgabe des Konstruktors, die Initialisierung durchzuführen, übernimmt in Applets die Methode init().
Anmerkungen: |
| impressum | datenschutz
© Copyright Artikelpedia.com