Java Applets erklärt: Grundlagen & wichtige Unterschiede
Ein Applet ist ein Java-Programm, das in einem Webbrowser ausgeführt wird. Ein Applet kann eine voll funktionsfähige Java-Anwendung sein, da es die gesamte Java-API zur Verfügung hat.
Es gibt wichtige Unterschiede zwischen einem Applet und einer eigenständigen Java-Anwendung:
- Ein Applet ist eine Java-Klasse, die
java.applet.Appleterweitert. - Eine
main()-Methode wird bei einem Applet nicht aufgerufen, und eine Applet-Klasse definiert keinemain()-Methode. - Applets sind dafür konzipiert, in eine HTML-Seite eingebettet zu werden.
- Wenn ein Benutzer eine HTML-Seite mit einem Applet aufruft, wird der Applet-Code auf den Rechner des Benutzers heruntergeladen.
- Eine JVM ist erforderlich, um ein Applet anzuzeigen – entweder als Browser-Plugin oder als separate Laufzeitumgebung.
- Die JVM auf dem Benutzerrechner erstellt eine Instanz der Applet-Klasse und ruft verschiedene Methoden während der Lebensdauer des Applets auf.
- Applets unterliegen strengen Sicherheitsregeln, die vom Webbrowser durchgesetzt werden (Sandkasten-Sicherheit).
- Andere benötigte Klassen können in einer einzelnen Java Archive (JAR)-Datei heruntergeladen werden.
Lebenszyklus eines Applets
Vier Methoden in der Applet-Klasse geben Ihnen das Framework, auf dem Sie jedes ernsthafte Applet aufbauen:
- init() – Für Initialisierung gedacht. Wird nach der Verarbeitung der param-Tags innerhalb des applet-Tags aufgerufen.
- start() – Wird automatisch nach dem Aufruf von
init()durch den Browser aufgerufen. Auch wenn der Benutzer zur Seite mit dem Applet zurückkehrt. - stop() – Wird automatisch aufgerufen, wenn der Benutzer die Seite verlässt, auf der das Applet sitzt. Kann wiederholt aufgerufen werden.
- destroy() – Wird nur aufgerufen, wenn der Browser normal heruntergefahren wird. Ressourcen sollten beim Verlassen der Seite freigegeben werden.
- paint() – Wird unmittelbar nach
start()und immer dann aufgerufen, wenn das Applet sich im Browser neu zeichnen muss. Erbt vonjava.awt.
Ein „Hallo Welt“-Applet
import java.applet.*;
import java.awt.*;
public class HelloWorldApplet extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World", 25, 50);
}
}
Diese Import-Statements bringen die Klassen in den Gültigkeitsbereich:
java.applet.Appletjava.awt.Graphics
Die Applet-Klasse
Jedes Applet erweitert die java.applet.Applet-Klasse. Die Basisklasse stellt Methoden bereit, um Informationen und Dienste vom Browser-Kontext zu erhalten:
- Applet-Parameter abrufen
- Netzwerkposition der HTML-Datei ermitteln
- Netzwerkposition des Applet-Klassenverzeichnisses ermitteln
- Statusmeldung im Browser ausgeben
- Bild laden
- Audio-Clip laden
- Audio-Clip abspielen
- Applet-Größe ändern
Zusätzlich bietet die Applet-Klasse eine Schnittstelle, über die der Viewer/Browser Informationen über das Applet erhält und dessen Ausführung steuert.
Ein Applet aufrufen
Ein Applet wird durch Einbetten von Direktiven in eine HTML-Datei aufgerufen und durch einen Applet-Viewer oder Java-fähigen Browser angezeigt.
Das <applet>-Tag ist die Basis für die Einbettung:
<html>
<title>Das Hallo-Welt-Applet</title>
<hr>
<applet code="HelloWorldApplet.class" width="320" height="120">
Falls Ihr Browser Java-fähig wäre, würde hier „Hallo Welt“ erscheinen.
</applet>
<hr>
</html>
Hinweis: Das code-Attribut ist erforderlich. width und height geben die Anfangsgröße an. Der Tag muss mit </applet> geschlossen werden.
Parameter werden über <param>-Tags zwischen <applet> und </applet> übergeben. Nicht-Java-Browser ignorieren den Inhalt zwischen den Tags.
Mit dem codebase-Attribut kann ein anderer Speicherort für den kompilierten Code angegeben werden:
<applet codebase="https://example.com/applets" code="HelloWorldApplet.class" width="320" height="120">
Applet-Parameter abrufen
Das folgende Beispiel zeigt, wie ein Applet auf Setup-Parameter reagiert. Ein Schachbrettmuster in Schwarz und einer zweiten Farbe wird angezeigt.
import java.applet.*;
import java.awt.*;
public class CheckerApplet extends Applet {
int squareSize = 50;
public void init() {
String squareSizeParam = getParameter("squareSize");
parseSquareSize(squareSizeParam);
String colorParam = getParameter("color");
Color fg = parseColor(colorParam);
setBackground(Color.black);
setForeground(fg);
}
private void parseSquareSize(String param) {
if (param == null) return;
try { squareSize = Integer.parseInt(param); }
catch (Exception e) { /* Standardwert beibehalten */ }
}
private Color parseColor(String param) {
// String-Vergleiche für vordefinierte Farben
return Color.blue; // vereinfacht
}
public void paint(Graphics g) {
// Zeichne Schachbrett...
}
}
Applet-Parameter festlegen
<html>
<title>Schachbrett-Applet</title>
<hr>
<applet code="CheckerApplet.class" width="480" height="320">
<param name="color" value="blue">
<param name="squaresize" value="30">
</applet>
<hr>
</html>
Hinweis: Parameternamen sind nicht case-sensitive.
Anwendung in Applet konvertieren
Eine grafische Java-Anwendung (AWT-basiert) lässt sich leicht in ein Applet umwandeln:
- HTML-Seite mit passendem Tag erstellen
- Unterklasse von
JAppletbereitstellen (public) main()-Methode entfernen, kein Frame-Fenster erstellen- Initialisierungscode von Frame-Konstruktor in
init()verschieben setSizeentfernen (Größe über HTML-Attribute)setDefaultCloseOperationentfernen (Applet kann nicht geschlossen werden)setTitleentfernen (Applets haben keine Titelleisten)setVisible(true)nicht aufrufen (automatisch angezeigt)
Ereignisbehandlung
Applets erben Ereignisbehandlungsmethoden von der Container-Klasse. Um auf ein Ereignis zu reagieren, muss das Applet die entsprechende methode überschreiben.
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;
public class ExampleEventHandling extends Applet implements MouseListener {
StringBuffer strBuffer;
public void init() {
addMouseListener(this);
strBuffer = new StringBuffer();
addItem("initialisiere das Applet ");
}
public void start() { addItem("starte das Applet "); }
public void stop() { addItem("stoppe das Applet "); }
public void destroy() { addItem("entlade das Applet"); }
void addItem(String word) {
System.out.println(word);
strBuffer.append(word);
repaint();
}
public void paint(Graphics g) {
g.drawRect(0, 0, getWidth()-1, getHeight()-1);
g.drawString(strBuffer.toString(), 10, 20);
}
// MouseListener-Methoden
public void mouseClicked(MouseEvent e) { addItem("Maus geklickt! "); }
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
Bilder anzeigen
Applets können Bilder (GIF, JPEG, BMP) anzeigen. Verwenden Sie drawImage() aus java.awt.Graphics.
import java.applet.*;
import java.awt.*;
import java.net.*;
public class ImageDemo extends Applet {
private Image image;
private AppletContext context;
public void init() {
context = this.getAppletContext();
String imageURL = this.getParameter("image");
if (imageURL == null) imageURL = "java.jpg";
try {
URL url = new URL(this.getDocumentBase(), imageURL);
image = context.getImage(url);
} catch (MalformedURLException e) {
e.printStackTrace();
context.showStatus("Bild konnte nicht geladen werden!");
}
}
public void paint(Graphics g) {
context.showStatus("Zeige Bild");
g.drawImage(image, 0, 0, 200, 84, null);
g.drawString("www.example.com", 35, 100);
}
}
Audio abspielen
Applets können Audiodateien über das AudioClip-Interface abspielen. Drei Methoden: play(), loop(), stop().
import java.applet.*;
import java.awt.*;
import java.net.*;
public class AudioDemo extends Applet {
private AudioClip clip;
private AppletContext context;
public void init() {
context = this.getAppletContext();
String audioURL = this.getParameter("audio");
if (audioURL == null) audioURL = "default.au";
try {
URL url = new URL(this.getDocumentBase(), audioURL);
clip = context.getAudioClip(url);
} catch (MalformedURLException e) {
e.printStackTrace();
context.showStatus("Audio-Datei konnte nicht geladen werden!");
}
}
public void start() { if (clip != null) clip.loop(); }
public void stop() { if (clip != null) clip.stop(); }
}
Wichtiger Hinweis: Java Applets werden seit Java 9 als deprecated markiert und in Java 11 vollständig entfernt. Moderne Webanwendungen verwenden stattdessen JavaScript/WebAssembly.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList