Galileo Computing <openbook>
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Buch: Java ist auch eine Insel - Zum Katalog
gp Kapitel 20 Applets
  gp 20.1 Applets und Applikationen – wer darf was
  gp 20.2 Das erste Hallo-Applet
  gp 20.3 Die Zyklen eines Applets
  gp 20.4 Parameter an das Applet übergeben
    gp 20.4.1 Wie das Applet den Browserinhalt ändern kann
    gp 20.4.2 Den Ursprung des Applets erfragen
    gp 20.4.3 Was ein Applet alles darf
  gp 20.5 Musik in einem Applet
    gp 20.5.1 Fest verdrahtete Musikdatei
    gp 20.5.2 Variable Musikdatei über einen Parameter
    gp 20.5.3 WAV- und MIDI-Dateien abspielen
  gp 20.6 Browserabhängiges Verhalten
    gp 20.6.1 Java im Browser aktiviert?
    gp 20.6.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
    gp 20.6.3 Datenaustausch zwischen Applets und Java Skripten
  gp 20.7 Applets und Applikationen kombinieren
  gp 20.8 Datenaustausch zwischen Applets
  gp 20.9 Webstart

Kapitel 20 Applets

Mode ist, was man selbst trägt.
Altmodisch ist, was die anderen tragen.
– Oscar Wilde

Bisher haben wir mit Applikationen gearbeitet, die auf der Kommandoebene oder vom Fenstersystem gestartet werden und über unmittelbaren Zugriff auf die Rechnerressourcen verfügen. Im Gegensatz dazu stehen Applets, welche im Webbrowser oder Appletviewer ablauffähig sind. Mittlerweile verschönern eine Vielzahl von Applets die eigenen Web-Seiten und bremsen den Browser aus. Eine gute Übersicht verfügbarer Applets ist bei http://www.gamelan.com zu finden.

Da Microsoft mit ihrer Produktpolitik in den neuen Versionen ihres Betriebsystems (Windows XP) und Browsers die Java Virtuelle Maschine nicht mehr vorinstalliert, wird das die Verbreitung von Applets im Internet weiterhin bremsen.


Galileo Computing

20.1 Applets und Applikationen – wer darf was  downtop

Ein Applet unterliegt hohen Sicherheitsbeschränkungen – eine auf dem Host liegende Datei kann nicht gelöscht werden und schon der lesende Zugriff ist unzulässig. Leider müssen wir bei der schwachen Umsetzung des Java-Standards 1.1 vielfach Applets unter 1.0 schreiben. Die Ereignisbehandlung muss somit anders programmiert werden.

Von der Programmseite aus gesehen besitzt eine Applikation eine main()-Methode und ein Applet nicht – es erweitert statt dessen die Klasse java.applet.Applet. Doch auch hybride Software, die sowohl Applikation als auch Applet ist, ist nicht ausgeschlossen. Diese Sorte Programm erweitert einfach die Klasse Applet und implementiert die main() Funktion. Vom Sicherheitsstandpunkt aus gesehen kontrolliert der SecurityManager die Handlungen der Software.


Galileo Computing

20.2 Das erste Hallo-Applet  downtop

Ein Programm wird leicht zu einem Applet, wenn es die Klasse Applet erweitert. Als Einstieg soll ein kleines Beispiel-Applet dienen.

Listing 20.1   HelloWorldApplet.java
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorldApplet extends Applet
{
public void paint( Graphics g )
{
g.drawString( "Hello world!", 50, 25 );
}
}

Die ersten beiden Import-Anweisungen binden die notwendigen Informationen über Applets und über Zeichenfunktionen ein. Das HelloWorldApplet erweitert die Klasse Applet, denn so wird ein Applet erzeugt. Eine main()-Funktion kommt nicht vor, und es muss eine Funktion paint() überladen werden, die den Bildschirmaufbau übernimmt. Der Web-Browser oder Applet-Viewer ruft diese Funktion auf.

Damit der Viewer aber überhaupt weiß, was zu machen ist, muss im HTML-Code einen Hinweis auf die Klasse geben, die in die Seite eingebettet wird. Dies wird über einen speziellen Tag erreicht.

Listing 20.2   index.html
<html><body>
<applet code="HelloWorldApplet" width=200 height=100></applet>
</body></html>

Nebenbei überträgt der Applet-Tag auch noch die Ausmaße des Fensters, in dem das Applet zeichnen kann. Unter Java 1.1 ist ein neuer Tag definiert worden, der auch die Übermittlung von gepackten Dateien (im Jar-Format) unterstützt. Die Angabe der Klasse in der Code-Anweisung sollte keine Leerzeichen beinhalten, da dies dem Communicator und dem Applet-Viewer Probleme bereitet.


Galileo Computing

20.3 Die Zyklen eines Applets  downtop

Beim Start eines Applets werden unterschiedliche Methoden vom Browser automatisch aufgerufen. Zuerst beginnt es mit einer Methode init(). Dort sollten Initialisierungen gemacht werden. init() wird nur einmal aufgerufen, wenn die Seite vom Browser geladen wird. Nach der Initialisierung folgt ein Wechsel der Methoden start() und stop() immer dann, wenn ein Applet im Browser sichtbar ist oder von der Seite verschwindet, etwa wenn der Anwender über die Schieberegler einen anderen Bereich auswählt, in dem das Applet nicht liegt. Beim Verlassen der Seite wird abschließend destroy() aufgerufen. Dort können Ressourcen freigegeben werden.


Galileo Computing

20.4 Parameter an das Applet übergeben  downtop

Dem Applet können Parameter im Applet-Tag übergeben werden. Im Folgenden zeichnet ein Applet den übergebenen String einfach auf den Schirm.

Listing 20.3   DrawStringApplet.java
import java.applet.Applet;
import java.awt.Graphics;

public class DrawStringApplet extends Applet
{
String string;

public void init()
{
string = getParameter( "String" );
}

public void paint(Graphics g)
{
g.drawString( string, 50, 50 );
}
}

Abschließend noch das kleine HTML-Listing.

Listing 20.4   index.html
<html><body>
<APPLET code="DrawStringApplet.class" width="200" height="200">
<PARAM name="String" value="Himbeerpocken">
</APPLET>
</body></html>

Galileo Computing

20.4.1 Wie das Applet den Browserinhalt ändern kann  downtop

Das Applet kann mit showDocument() auf den Inhalt der Seite Einfluss nehmen. So lassen sich Applets bauen, die eine Baumstruktur der Seite anzeigen und dann zum Inhalt verweisen, falls eine Seite ausgewählt wird. Verwendet werden hier die Methoden vom AppletContext. In Kurzform

getAppletContext().showDocument( 
new URL("http://www.ullilieb.com") );

oder, falls ein spezieller Frame mit Namen angesprochen ist

getAppletContext().showDocument( 
new URL("http://ulli.org"),"Frame" );
class java.applet.Applet
extends Panel

gp  AppletContext getAppletContext()
Liefert den Kontext des Applets. Dieser erlaubt es ihm herauszufinden, in welcher Umgebung, also auf welcher Web-Seite, er sich bewegt.
interface java.applet.AppletContext

gp  void showDocument( URL url )
Wechselt den Inhalt auf der aktuellen Seite mit einer neuen Seite der gegebenen URL.
gp  void showDocument( URL url, String target )
Wechselt den Inhalt auf der aktuellen Seite mit einer neuen Seite der gegebenen URL. Dabei wird das Dokument in einen Frame abgelegt, dessen Name zusätzlich festgesetzt ist. Für target sind erlaubt:
    gp  _self (Seite, die das Applet enthält),
    gp  _parent (bettet die neue Seite in die Vaterseite des Applets ein; falls diese nicht existiert, verhält es sich wie _self),
    gp  _top (anzeigen im Top-Level-Frame; falls dieser nicht existiert, wie _self).
    gp  _blank (erzeugt ein neues Fenster).
Falls der Name nicht mit den Konstanten übereinstimmt, so wird die Anzeige in ein Frame gelegt, der diesen Namen trägt.

Galileo Computing

20.4.2 Den Ursprung des Applets erfragen  downtop

Greift ein Applet auf Daten des Servers zu und ist ihm die Adresse nicht bekannt, so kann es nachfragen. Die Applet-Klasse stellt eine Methode getCodeBase() zur Verfügung, welches ein URL-Objekt von der aktuellen Verbindung zurückliefert. Dann liefert getHost() eine String-Repräsentation der URL. So kommen wir mit den Methoden getCodeBase().getHost() an den Hostnamen und auch an die Daten des Servers.

Beispiel Applets können ohne Problem von Webseiten geklaut werden. Um dem einen Riegel vorzuschieben, können wir verlangen, dass die Zeichenkette von getDocumentBase().getHost() immer die Webseite unseres Servers repräsentiert.
String web = getDocumentBase().getHost();

if ( !web.equals("www.mydomain.com") )
{
// hier meckern, das was nicht stimmt.
}

Wir könnten die Überprüfung auch über ein InetAdress Objekt realisieren.

class java.net.URL
implements Serializable, Comparable

gp  String getHost()
Liefert Host-Namen des URL-Objekts. Handelt es sich um das »file«-Protokoll, so ist der Rückgabewert ein leerer String.
class java.applet.Applet
extends Panel

gp  URL getCodeBase()
Liefert die Basis-URL des Applets.
Beispiel Baue eine URL-Verbindung zu einer Grafikdatei auf. Wir nutzen hier zunächst die Methode getDocumentBase(), um an die URL des Servers zu gelangen, und anschließend den URL-Construktor, der uns relativ zur Basisadresse eine Pfadangabe erlaubt.

Listing 20.5   AppletURLConstructor.java
import java.applet.Applet;
import java.net.*;

public class AppletURLConstructor extends Applet
{
public void init()
{
URL u1 = getDocumentBase();
System.out.println( u1 );

try {
URL u2 = new URL( u1, "grafik.gif" );
System.out.println( u2 );
}
catch ( MalformedURLException e ) {
System.err.println( e );
}
}
}

Galileo Computing

20.4.3 Was ein Applet alles darf  downtop

Ein Applet unterliegt bestimmten Sicherheitsbeschränkungen, die eine Java-Security-Einheit überprüft. In einem speziellen Kapitel über Sicherheit werden wir dies näher beleuchten.

Viele der bekannten Fehler in Java, die potenzielle Sicherheitslücken darstellen, sind mittlerweile behoben. Und schon das Aufinden setzt eine erbarmungslose Kenntnis der Java-Quelltexte vorraus. Beispielsweise der Fehler mit der Host-Adresse: Wenn ein Benutzer ein Applet von »www.uni-paderborn.de« liest, dann darf dieses Applet nur mit dem Host eine Verbindung aufbauen und mit keinem anderen. Doch leider war in den Quelltexten von Java ein Fehler, sodass das Applet nur den Rechnernamen des Hosts vergleicht, nicht aber die IP-Adresse. Ein kluges Applet kann nun dem DNS (Domain-Name-Server) eine falsche Zuordnung von Rechnernamen und IP-Adresse vorspielen und nun verhält sich »www.uni-paderborn.de« wie »www.ganz-boese.com«.

Mehr Informationen über dass, was ein Applet alles darf und was nicht, findet sich im nächsten Kapitel über Sicherheitskonzepte.


Galileo Computing

20.5 Musik in einem Applet  downtop

Die Applet-Klasse verfügt über die Methode getAudioClip(URL, Datei), die eine Audiodatei holt. Das Dateiformat ist das AU-Format von Sun.

interface java.applet.AppletContext

gp  AudioClip getAudioClip( URL )
Erzeugt ein AudioClip-Objekt, welches durch die URL-Angabe angegeben ist.

Galileo Computing

20.5.1 Fest verdrahtete Musikdatei  downtop

Wir platzieren die Audiodatei in unserem Code-Verzeichnis, sodass über die Methode getCodeBase() keine weiteren Angaben zum Host zu machen sind. Das Applet bekommt eine Minimalausführung. In der init()-Funkiton lesen wir die Datei, und die start()-Methode spielt den AudioClip mit seiner ureigensten Methode play() ab.

Listing 20.6   AudioPlayer.java
import java.applet.Applet;
import java.awt.*;

public class AudioPlayer extends Applet
{
String file = "lala.au";
AudioClip ac;

public void init()
{
ac = getAudioClip( getCodeBase(), file );
start();
}

public void start()
{
ac.play();
}

public void stop()
{
ac.stop();
}
}

Da das Applet lediglich beim Starten Musik abspielen muss, benötigt es auf dem Bildschirm auch keine Ausmaße – wir können somit Höhe und Breite bedenkenlos auf Null setzen. Das Applet-Tag ist herzlich kurz.

Listing 20.7   index.html
<applet code=AudioPlayer.class 
width=0 height=0></applet>

Galileo Computing

20.5.2 Variable Musikdatei über einen Parameter  downtop

Dass das Programm noch wesentlich kürzer programmiert werden kann, zeigt folgende Überlegung: In der init()-Methode können wir schon sofort mit dem Abspielen der Musik beginnen. Wir vereinbaren eine Variable musiFileName, über die wir die Musikdatei austauschen. Somit ist unser Programm wesentlich flexibler.

Listing 20.8   AudioPlayer.java
import java.applet.Applet;
import java.awt.*;

public class AudioPlayer extends Applet
{
public void init()
{
String soundFile = getParameter( "musiFileName" );
play( getCodeBase(), soundFile );
}
}

Zum Einbinden dieses Applets können wir etwa folgenden HTML-Code verwenden:

Listing 20.9   index.html
<applet code="AudioPlayer.class" 
width=0 height=0>
<param name="musiFileName" value="lala.au">
</applet>

Galileo Computing

20.5.3 WAV- und MIDI-Dateien abspielen  downtop

Sounddateien im WAV- oder MIDI-Format können erst seit 1.2 abgespielt werden. Vorher war dies nicht möglich. Bevor wir zur neuen Variante kommen, im Folgenden die Auflösung, wie es früher gemacht wurde. Hier blieb nur eine Konvertierung in das AU-Format, etwa mit dem Programm GoldWave.

Was Java 1.2 nun möglich macht

Seit Java 1.2 hat sich im Bereich Soundwiedergabe einiges getan, so ist die Sound-Engine gründlich überarbeitet worden. Sie unterstützt nun die folgenden Audio-Formate: AIFF, AU und WAV.

Ebenso ist ein MIDI-Renderer enthalten, der die Dateiformate TYPE 0 MIDI, TYPE 1 MIDI und RMF unterstützt. Dieser erzeugt softwaremäßig mit einem 4 MB großen Wave-RAM – dies liegt unter java/lib – General Midi. Die Soundmaschine kann 8- oder 16-Bit Audio-Daten rendern, entweder Mono oder Stereo. Dabei werden Sampling-Raten von 8 KHz bis 48 KHz unterstützt.

Sound in Applikationen

Nun können aber auch Applikationen Musik abspielen. Dazu bietet die Klasse java.applet.Applet – wie sinnig! – die statische Methode

public static final AudioClip newAudioClip( 
URL )

Damit lässt sich ein AudioClips-Objekt auch ohne ein AppletContext erzeugen. Anschließend spielt die uns schon bekannte Routine play() vom AudioClip die Musikdatei vor.

Wer noch mit älteren Versionen (also vor 1.2) arbeiten muss, kann sich nur mit dem undokumentiertierten Paket sun.audio vergnügen Ein Demo findet sich zum Beispiel in der comp.lang.java FAQ (etwa auf SunSITE.Informatik.RWTH-Aachen.DE/javafaq/javafaq.html). Ein weiteres Paket mit dem Namen audio kommt von Mike Piff (http://www.shef.ac.uk/~cs1mjp/Java/WhiteBoard/WavePlayer.html). Es basiert auf dem undokumentierten Paket sun.audio, funktioniert aber unter Winows und Linux problemlos.


Galileo Computing

20.6 Browserabhängiges Verhalten  downtop


Galileo Computing

20.6.1 Java im Browser aktiviert?  downtop

Wenn unser Browser Java Applets ausführen soll, aber Java überhaupt nicht aktiviert ist, dann lassen sich einige interaktive Benutzeraktionen nicht durchführen. Wir sollten daher zumindest eine Meldung anbieten, dass der Browser Java gerade nicht aktiviert hat. Dies kann beabsichtigt oder nicht beabsichtigt sein. Natürlich kommt Java dafür nicht in Frage, aber eine Skript-Sprache, die sich ähnlich anhört: JavaScript. Ab JavaScript Version 1.1 bietet uns der Interpreter die Funktion javaEnabled() an, sodass wir eine Weiterschaltung vornehmen können:

if ( !navigator.javaEnabled() )
{
self.location.href = "nix_mit_java.html";
}

Für diese Lösung muss natürlich JavaScript aktiviert sein. Für einige Surfer ist selbst dies schon eine Sicherheitslücke, und wenn JavaScript deaktiviert ist, lässt sich hier nichts mehr machen. Falls JavaScript aktiviert ist, kommen wir dem Benutzer einen Schritt entgegen, sodass er nicht mehr manuell angeben muss, ob Java aktiviert ist oder nicht. Von dieser Technik sollten wir auch Gebrauch machen, denn nicht immer hat der Benutzer aktiv Java abgeschaltet. Im Beispiel oben haben wir eine Seite angesteuert, wobei natürlich andere Anweisungen denkbar sind. Doch diese Form ist sinnvoll, denn wir können Benutzern eine Kurzbeschreibung liefern, wie Java im Browser aktiviert wird. Zusammen mit der Browservariante ist eine browsergenaue Beschreibung einsetzbar.


Galileo Computing

20.6.2 Läuft das Applet unter Netscape oder Microsoft Explorer?  downtop

Kann der Browser ein Applet aus irgendwelchen Gründen nicht auführen, so sind die Meldungen an den Benutzer meist mager. Oft beschränken sie sich auf eine Exception-Angabe in der Statuszeile. Dies mag keiner mehr sehen wollen. Doch leider verschärfen inkompatible Browser die Situation. Was hier hilft, ist ein kleines Programm, welches zunächst herausfindet, auf welchem Browser es läuft. Dann können unter Umständen browser- und versionsabhängige Varianten ausgeführt werden.

Wir verwenden einen Trick, der auch beim Erkennen von Prozessortypen angewendet wird. Wir versuchen Operationen aufzurufen, die es für den jeweils anderen Browser nicht gibt. Wenn dann eine Exception geworfen wird, wissen wir Bescheid. Nun haben ja IE und Communicator jeweils ihre eigenen Klassen, der Communicator zum Beispiel die Klasse netscape.applet.MozillaAppletContext und IE com.ms.applet.GenericAppletContext.

Beispiel Wir versuchen über die selbstgebastelten Methoden isNetscape() und isMicrosoft() etwas über unsere Laufzeitumgebung herauszufinden.

Listing 20.10   BrowserDetector.java
import java.applet.*;

public class BrowserDetector extends Applet
{
public void init()
{
if ( isNetscape() )
System.out.println("This browser is a Netscape Browser.");

if ( isMicrosoft() )
System.out.println("This browser is a Microsoft Browser.");
}

public static boolean isNetscape()
{
try {
Class.forName("netscape.applet.MozillaAppletContext");
}
catch ( ClassNotFoundException e ) { return false; }
return true;
}

public static boolean isMicrosoft()
{
try {
Class.forName("com.ms.applet.GenericAppletContext");
}
catch ( ClassNotFoundException e ) { return false; }
return true;
}
}

Galileo Computing

20.6.3 Datenaustausch zwischen Applets und Java Skripten  downtop

Da der Netscape Navigator sowohl Java als auch JavaScript unterstützt, hat Netscape eine Technik implementiert, mit der das Java-Applet und JavaScript-Programm Daten austauschen können.

JavaScript ruft Applet auf

Innerhalb von JavaScript lassen sich alle öffentlichen Variablen und Methoden vom Applet in der Form document.appletname.variable bzw. document.appletname.methode() ansprechen.

Applet ruft JavaScript auf

Das Java-Applet kann Funktionen von JavaScript aufrufen, indem die Klasse JSObject aus dem Package netscape.javascript verwendet wird. Daher muss eine Anweisung ähnlich wie die folgende dabei sein:

import netscape.javascript.*;

Im Paket liegt JSObject, eine spezielle Klasse von Netscape. Interessanterweise ist das Objekt auch beim IE mit dabei.


Galileo Computing

20.7 Applets und Applikationen kombinieren  downtop

Ein Applet ist nichts weiter als eine besondere Form einer Applikation. Somit lassen sich auch beide vereinigen. Es muss nur in einem Applet eine main()-Funktion geben und schon ist das Programm sowohl unter dem Appletviewer als auch unter der Kommandozeile normal auszuführen.


Galileo Computing

20.8 Datenaustausch zwischen Applets  downtop

Sind mehrere Applets auf einer Web-Seite untergebracht, so gibt es Fälle, in denen die Applets Daten austauschen wollen. Zwei Lösungen bieten sich an. Da alle Applets in einer einzigen JVM laufen, lässt sich über statische Attribute auf die anderen Elemente zugreifen. Dies spricht jedoch gegen die Datenkapselung und ist sehr unfein. Aber diese Technik hat noch einen weiteren Schwachpunkt. Statische Variablen hängen eng mit dem Klassenlader zusammen. Hier gab es in der Vergangenheit beim Netscape einige Probleme (die aber nun behoben sein sollten). Eleganter ist da schon die Möglichkeit über die Schnittstelle AppletContext.

class java.applet.Applet
extends Panel

gp  AppletContext getAppletContext()
Bestimmt die Umgebung eines Applet.
interface java.applet.AppletContext

gp  Applet getApplet(String name)
Sucht das Applet mit dem Namen name in dem Dokument, die durch den AppletContext gegeben ist. Der Name kann durch das HTML-Tag gesetzt sein. Falls kein Applet des Namens existiert, liefert die Methode null.
gp  Enumeration getApplets()
Findet alle Applets, die durch AppletContext gegeben sind.

Zwei Lösungen bietet sich nun an. Die ältere Variante erwartet, dass das Applet einen Namen besitzt. Dieser wird mit dem NAME-Attribut im APPLET-Tag zugewiesen, etwa <APPLET ... NAME=Name ...>.

Eine Verbindung der Methode aus Applet und AppletContext führt zu der Zeile

Applet anotherApplet = getAppletContext.getApplet( 
"Name" );

Wie wir oben gesehen haben, lässt sich auch eine Enumeration aller Applets einer Seite mit getApplets() besorgen.

Applet otherApplet = null;

Enumeration applets = getAppletContext.getApplets();

while ( applets.hasMoreElements() )
{
otherApplet = (Applet)applets.nextElement();
if ( otherApplet != this)
break;
// Jetzt können wir etwas mit dem anderen Applet machen, etwa
// if ( otherApplet instanceof MeinApplet )
// ...
}

Ein Applet kann sich, falls bekannt, in eine Unterklasse casten. Dann lassen sich alle Methoden aufrufen und die Variablen auslesen. Leider funktionieren beide vorgestellten Methoden nur, wenn die Applets in einem gleichen Frame liegen. Liegen sie in verschiedenen Frames, findet zumindest die Netscape Methode getApplet() das Applet leider nicht. Hier bleibt aber noch die Variante über statische Variablen übrig. Eine weitere Möglichkeit Applets über verschiedene Frames kommunizieren zu lassen, geht über eine JavaScript-Funktion. Sie fungiert als Brücke. Dies wird hier allerdings nicht beschrieben.

Das folgende Beispiel zeigt zwei Applets Applet1 und Applet2 auf einer Web-Seite. Zunächst der HTML-Code:

Listing 20.11   Applets.html
<HTML><BODY>
<APPLET CODE="Applet1.class"
NAME="applet1"
HEIGHT=200 WIDTH=200>
</APPLET>
<APPLET CODE="Applet2.class"
NAME="applet2"
HEIGHT=200 WIDTH=400>
</APPLET>
</BODY></HTML>

Es folgen die Implementierungen für die beiden Applets:

Listing 20.12   Applet1.java
import java.applet.Applet;
import java.awt.*;

public class Applet1 extends Applet
{
TextField inputText;

public void init()
{
setLayout( new FlowLayout() );
inputText = new TextField( "", 10 );
add( inputText );
add( new Button( "Sende an Applet2" ) );
}

public boolean action( Event ev, Object arg )
{
if ( ev.target instanceof Button )
{
String textMsg = inputText.getText().trim();
Applet2 applet2 =
(Applet2)getAppletContext().getApplet("applet2");
if ( applet2 != null ) {
applet2.appendTheText( textMsg );
return true;
}
}
return false;
}
}
Listing 20.13   Applet2.java
import java.applet.Applet;
import java.awt.*;

public class Applet2 extends Applet
{
TextArea textBox;

public void init()
{
setLayout( new FlowLayout() );
textBox = new TextArea( 5, 40 );
add( textBox );
}

public void appendTheText( String s )
{
textBox.appendText( s + "\n" );
}
}

Galileo Computing

20.9 Webstart  toptop

Bevor Software auf den Rechner ab läuft, wird sie in der Regel installiert. Dazu legen die Hersteller der Software ein spezielles Installationsprogramm bei, unter Windows oft die InstallShields. Das Installationsprogramm legt passenden Verzeichnisse an und initialisiert etwa die Registrierdatenbank unter Windows. Etwas anders sieht das bei Java-Programmen aus. Die Installation erfordert jedoch zuerst eine Java-Laufzeitumgebung. Anschließend kann das Programm entpackt und gestartet werden. Wünschenswert ist jedoch eine Art Umgebung sowie sie bei Java-Applets definiert ist. Ein Java Applets läuft innerhalb eines Browsers in einem speziellen Sicherheitsmodus und es wäre günstig, wenn auch für alle anderen Applikationen möglich wäre. Das bedeutet, eine beliebige Applikationen soll etwa von einer Webseite geladen und auf dem lokalen Rechner ausgeführt werden. Die Applikationen soll sich nicht von anderen Applikationen, die lokal installiert sind, unterscheiden. Damit so etwas möglich ist, müssen wir unsere eigene Programme mit einer Sun-Technologie ausstatten, die Web-Start heißt. Webstart deckt die Bereiche Installation, Start und Update ab durch ein eigenes Protokoll ab, dass Java Network Launcher Protocol (JNLP). Die Technologie wurde auf der JavaOne 2000 erstmals vorgestellt. Mehr Informationen sind unter der Webadresse http://java.sun.com/products/javawebstart nachzulesen. Einige Demos zum Ausprobieren gibt es dann unter der Adresse http://java.sun.com/products/javawebstart/demos.html. Neben der Webseite von Sun widmet sich auch die Webseite von Gerald Bauer mit einer FAQ unter einem einfachen Beispiel unter http://www.geocities.com/vamp201/tutorial.html dem Thema.

  

Java 2




Copyright © Galileo Press GmbH 2002
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, fon: 0228.42150.0, fax 0228.42150.77, info@galileo-press.de