Einführung
Java Applets sind Java-Programme, welche im Browser ausgeführt und in eine Webseite integriert werden. Die Applikation wird dabei über die JVM (Java Virtual Machine) ausgeführt. Zur Kommunikation zwischen dem Browser und der Java Laufzeitumgebung (kurz JRE für Java Runtime Environment) wird ein Plug-in benötigt.
Java Applets sind vollwertige Java-Anwendungen, in welchen alle Packages und Klassen von Java SE (Java Platform, Standard Edition) verfügbar sind. So stehen zur Programmierung der Benutzeroberfläche auch die AWT- und Swing-Komponenten von Java zur Verfügung.
Java Applets müssen, wie andere Java Programme auch, kompiliert werden. Die Verbreitung der Applets erfolgt mittels einer Java Archiv-Datei (JAR für Java Archive). Das Programm kann somit problemlos aus mehreren Klassen bestehen, da diese lediglich in die Archiv-Datei gepackt werden.
Der Einsatz von Applets findet sich hauptsächlich in firmeninternen Netzwerken. Auf Grund der Sicherheitsproblematik und der immer kleiner werdenden Browserunterstützung sollte von Applets, falls möglich, jedoch abgesehen werden. Oracle hat angekündigt, die Applet-Klassen sowie das Browser Plug-in in zukünftigen Versionen zu entfernen. Sollten Sie also nicht an die Verwendung von Applets gebunden sein, ist es durchaus sinnvoller, auf neue modernere Technologien zu setzen. Dazu zählt vor allem die Kombination von HTML5, CSS3 und JavaScript.
Zum Verständnis dieses Tutorials sind Vorkenntnisse in Java erforderlich. Für einen schnellen Wiedereinstieg können Sie unseren Crashkurs besuchen.
Wichtig: Google Chrome unterstützt seit Version 45 die Plug-in-Architektur NPAPI nicht mehr. Dies hat zur Folge, dass Java Applets in Google Chrome nicht mehr angezeigt werden. Weitere Browser werden dieser Entscheidung u. U. folgen.
Schnittstellen
Applets werden von der Basisklasse Applet
(Package java.applet
) abgeleitet, welche sich wiederum aus der Klasse
Panel
(Package java.awt
) ableitet. Im Gegensatz zu anderen Java-Anwendungen verfügen Applets standardmäßig über
keine main()
-Funktion. Das Hinzufügen einer main()
-Funktion hat keine Auswirkung auf das Applet selbst, erlaubt
jedoch das direkte Ausführen der jar-Datei mittels Doppelklick. Man spricht hier auch von einem hybriden Applet.
In der Applet
-Klasse gibt es folgende vier wichtige Funktionen: init()
, start()
, stop()
und destroy()
. Alle diese Funktionen müssen überschrieben werden, um dort einen bestimmten Programmcode hinterlegen zu können.
Der Aufruf der Funktionen geschieht automatisch durch den Browser oder Applet Viewer. Die Funktion init()
wird einmalig aufgerufen,
sobald die Applet-Ausführung vorbereitet wurde. start()
wird aufgerufen, sobald die Ausführung des Applets gestartet
wurde. Die Funktion wird mindestens einmal, direkt nach dem Aufruf der init()
-Funktion, ausgeführt. Die Funktion stop()
hingegen wird aufgerufen, sobald die Ausführung des Applets gestoppt wird. Die Ausführung dieser Funktion erfolgt ebenfalls auf jeden
Fall einmal, jedoch vor dem Aufruf der destroy()
-Funktion. destroy()
ist die letzte der vier Funktionen und wird
vor der Deinitialisierung des Applets aufgerufen. init()
und destroy()
können zur Allokierung und Freigabe
von Ressourcen verwendet werden. Wann start()
und stop()
aufgerufen wird ist browserabhängig. So wird z. B.
start()
und stop()
nicht bei jedem Browser ausgeführt, wenn ein Tab-Wechsel erfolgt. Natürlich müssen nur die
Funktionen überschrieben werden, welche Sie auch wirklich benötigen.
Zum Austausch von Daten zwischen der HTML-Seite und dem Applet können beim Initialisieren des Applets Parameter übergeben werden. Wie diese Übergabe und deren Abarbeitung aussieht, werden wir im Thema Parameterübergabe behandeln.
Sicherheit
Java Applets selbst stellen nur ein geringeres Sicherheitsrisiko dar. Applets werden zwar lokal ausgeführt, jedoch erfolgt die Ausführung in einer geschlossenen Laufzeitumgebung (auch als Sandbox bezeichnet), wodurch ein Zugriff auf das lokale System nicht möglich ist.
Ein größeres Problem hingegen stellen die Laufzeitumgebung, die virtuelle Maschine, die Klassenbibliotheken und das Browser-Plug-in dar. Sicherheitslücken in diesen Programmteilen erlauben bösartigen Applets einen direkten Zugriff auf das lokale System bzw. auf Teile des lokalen Systems. Auf Grund der immer wieder auftretenden Sicherheitslücken in der Java-Technologie haben einige Browser-Hersteller und Oracle selbst darauf reagiert.
Neben der abnehmenden Browser-Unterstützung von Applets (u. a. in Google Chrome) wurden auch die Sicherheitsregeln von Java verschärft. So werden vom Browser nur noch Applets, welche signiert sind, als „sicher“ markiert. Um „unsichere“ Applets auszuführen, muss neuerdings eine Ausnahmeregel im Java Control Panel hinzugefügt werden. Auch selbst-signierende Applets gelten standardmäßig nicht mehr als „sicher“.
Wichtig: Alle unsere Beispiele sind nicht signiert. Wenn Sie sich unsere Beispiele anschauen wollen, dann fügen Sie bitte die
folgende URL als Ausnahme in Ihrem Java Control Panel hinzu: https://ftp.homepage-webhilfe.de
.
Übrigens: Die Ausführung von lokalen Applets gilt ebenfalls nicht mehr als sicher. Wenn Sie also Applets im Browser testen wollen,
dann müssen Sie auch das lokale Laufwerk als Ausnahme hinzufügen. Befindet sich das Applet z. B. auf dem Laufwerk D, so müssen Sie eine
Ausnahme für file:///D:/
hinzufügen.
NetBeans IDE
Zur Entwicklung von Java Applets benötigen wir eine IDE, mit welcher Java-Applikationen entwickelt werden können. Zudem benötigen wir natürlich noch das JDK (Java Development Kit). Die in diesem Kurs enthaltenen Beispiele wurden mit Hilfe der IDE NetBeans erstellt. Die jeweiligen Projekte können über den Download-Button heruntergeladen werden.
Um in NetBeans ein Applet zu erstellen, klicken wir auf File
→ New Project
. Als nächstes wählen wir
Java
→ Java Class Library
. Jetzt haben wir ein leeres Projekt. Nun können wir ggf. ein Package und
anschließend unsere erste Klasse erstellen.
Für das erste Beispiel erstellen wir eine einfache Klasse und fügen bei der Klassendeklaration die Vererbung hinzu: extends java.applet.Applet
.
Da unser Projekt lediglich eine Library ist und über keine main()
-Funktion bzw. Hauptklasse verfügt, können wir das Projekt
nicht direkt starten. Mit einem Rechtsklick auf die Datei erscheint ein Kontextmenü, in welchem wir Run File
(Umschalt+F6)
oder Debug File
(Strg+Umschalt+F5) auswählen können. Zur Anzeige von Applets in der NetBeans IDE wird der sogenannte
Applet Viewer verwendet.
Um aus dem Projekt eine jar-Datei erstellen zu lassen, wählen wir Build Project
(F11) oder Clean and Build Project
(Umschalt+F11).
Erstes Applet
In unserem ersten Beispiel erstellen wir ein leeres Projekt (wie oben beschrieben) mit einer Klasse, bei welcher wir die Vererbung zu
java.applet.Applet
festlegen. Nun überschreiben wir die vier oben beschriebenen Funktionen init()
,
start()
, stop()
und destroy()
. Des Weiteren überschreiben wir die paint()
-Funktion,
um einen Begrüßungstext auf das Panel zu zeichnen.
Um die Ausgaben (Funktion System.out.println()
) zu sehen, empfiehlt sich die Ausführung des Projekts in einer IDE, wie
z. B. NetBeans. Alternativ ist es auch möglich, im Java Control Panel unter der Registerkarte Erweitert
, die Einstellungen
Tracing aktivieren
und Debugging aktivieren
zu aktivieren. Des Weiteren sollte die Option Konsole anzeigen
ausgewählt werden.
package de.hwh.bsp.hallowelt; import java.applet.Applet; import java.awt.Graphics; public class MeinApplet extends Applet { @Override public void init() { System.out.println("Applet initialisiert"); } @Override public void start() { System.out.println("Applet gestartet"); } @Override public void paint(Graphics g) { g.drawString("Hallo Welt!", 50, 50); } @Override public void stop() { System.out.println("Applet gestoppt"); } @Override public void destroy() { System.out.println("Applet deinitialisiert"); } }
HTML-Einbindung
Die Einbindung in HTML erweist sich als etwas schwerer, wie es z. B. bei Flash-Anwendungen der Fall ist. Grund dafür ist, die mangelnde Browserunterstützung sowie die nicht klare Definition zum Einbinden von Applets seitens des W3Cs.
Die beste Lösung zum Einbinden von Applets ist daher die Verwendung des Java Deployment Toolkits (kurz Java DT). Bei diesem
Toolkit handelt es sich um eine JavaScript-Library, welche das Einbinden von Applets je nach Browser durchführt und uns somit die
Arbeit vereinfacht. Die Library kann auf der Webseite von Java gefunden werden und direkt von dort eingebunden werden. Die Einbindung
erfolgt ganz normal mittels script
-Element.
<script type="text/javascript" src="http://java.com/js/deployJava.js"></script>
Für Webseiten, welche verschlüsselt (HTTPS) sind, kann das Skript auch über HTTPS geladen werden.
<script type="text/javascript" src="https://java.com/js/deployJava.js"></script>
Übrigens: Eine für den Entwickler lesbare Version (bei welcher Leerzeichen und Kommentare nicht entfernt wurden) kann unter https://www.java.com/js/deployJava.txt bezogen werden.
Über die Funktion runApplet()
des Objekts deployJava
ist es möglich, ein Applet anzuzeigen. Der Funktion
werden dabei zwei Objekte sowie eine Zeichenkette für die Minimalversion von Java mitgegeben. Im ersten Objekt werden die
Einstellungen für das Applet, wie z. B. die URL zur Archiv-Datei, die URL zur Codebasis, der Pfad zur Hauptklasse und die
Größe übergeben. Dem zweiten Parameter der runApplet()
-Funktion wird ein Objekt für die Applet-Parameter
übergeben. Darauf gehen wir im nächsten Thema nochmals genauer ein.
Sind keine Parameter vorhanden, so können wir hier null
übergeben. Die übergebene Minimalversion entspricht der Version
des JDKs, mit welchem das Archiv erstellt wurde.
Der folgende JavaScript-Code zeigt, wie das Beispiel „Hallo Welt“ von oben in die HTML-Seite eingebunden werden kann:
deployJava.runApplet( { codebase: "./", archive: "Hallo-Welt.jar", code: "de/hwh/bsp/hallowelt/MeinApplet.class", width: "150", height: "100" }, null, "1.8");