Java - Applet-Grundlagen
Ein Applet ist ein Java-Programm, das in einem Webbrowser ausgeführt wird. Ein Applet kann eine voll funktionsfähige Java-Anwendung sein, da ihm die gesamte Java-API zur Verfügung steht.
Es gibt einige wichtige Unterschiede zwischen einem Applet und einer eigenständigen Java-Anwendung, darunter die folgenden −
-
Ein Applet ist eine Java-Klasse, die die java.applet.Applet-Klasse erweitert.
-
Eine main()-Methode wird nicht auf einem Applet aufgerufen, und eine Applet-Klasse wird main() nicht definieren.
-
Applets wurden entwickelt, um in eine HTML-Seite eingebettet zu werden.
-
Wenn ein Benutzer eine HTML-Seite anzeigt, die ein Applet enthält, wird der Code für das Applet auf den Computer des Benutzers heruntergeladen.
-
Zum Anzeigen eines Applets ist eine JVM erforderlich. Die JVM kann entweder ein Plug-in des Webbrowsers oder eine separate Laufzeitumgebung sein.
-
Die JVM auf dem Computer des Benutzers erstellt eine Instanz der Applet-Klasse und ruft während der Lebensdauer des Applets verschiedene Methoden auf.
-
Applets haben strenge Sicherheitsregeln, die vom Webbrowser durchgesetzt werden. Die Sicherheit eines Applets wird oft als Sandbox-Sicherheit bezeichnet, wobei das Applet mit einem Kind verglichen wird, das in einer Sandbox spielt, wobei verschiedene Regeln befolgt werden müssen.
-
Andere Klassen, die das Applet benötigt, können in einer einzelnen Java Archive (JAR)-Datei heruntergeladen werden.
Lebenszyklus eines Applets
Vier Methoden in der Applet-Klasse geben Ihnen das Gerüst, auf dem Sie jedes ernsthafte Applet aufbauen −
-
initiieren − Diese Methode ist für die Initialisierung gedacht, die für Ihr Applet benötigt wird. Es wird aufgerufen, nachdem die param-Tags innerhalb des Applet-Tags verarbeitet wurden.
-
beginnen − Diese Methode wird automatisch aufgerufen, nachdem der Browser die Methode init aufgerufen hat. Es wird auch immer dann aufgerufen, wenn der Benutzer zu der Seite zurückkehrt, die das Applet enthält, nachdem er zu anderen Seiten gegangen ist.
-
Stopp − Diese Methode wird automatisch aufgerufen, wenn der Benutzer die Seite verlässt, auf der sich das Applet befindet. Es kann daher im selben Applet wiederholt aufgerufen werden.
-
zerstören − Diese Methode wird nur aufgerufen, wenn der Browser normal beendet wird. Da Applets auf einer HTML-Seite leben sollen, sollten Sie normalerweise keine Ressourcen zurücklassen, nachdem ein Benutzer die Seite verlässt, die das Applet enthält.
-
malen − Wird unmittelbar nach der start()-Methode aufgerufen und auch jedes Mal, wenn das Applet sich im Browser neu zeichnen muss. Die Methode paint() wird tatsächlich von java.awt geerbt.
Ein "Hallo, Welt"-Applet
Es folgt ein einfaches Applet namens HelloWorldApplet.java −
import java.applet.*; import java.awt.*; public class HelloWorldApplet extends Applet { public void paint (Graphics g) { g.drawString ("Hello World", 25, 50); } }
Diese import-Anweisungen bringen die Klassen in den Geltungsbereich unserer Applet-Klasse −
- java.applet.Applet
- java.awt.Graphics
Ohne diese import-Anweisungen würde der Java-Compiler die Klassen Applet und Graphics, auf die sich die Applet-Klasse bezieht, nicht erkennen.
Die Applet-Klasse
Jedes Applet ist eine Erweiterung der Klasse java.applet.Applet . Die Applet-Basisklasse stellt Methoden bereit, die eine abgeleitete Applet-Klasse aufrufen kann, um Informationen und Dienste aus dem Browserkontext zu erhalten.
Dazu gehören Methoden, die Folgendes tun:−
- Applet-Parameter abrufen
- Ermitteln Sie den Netzwerkspeicherort der HTML-Datei, die das Applet enthält
- Erhalten Sie den Netzwerkspeicherort des Applet-Klassenverzeichnisses
- Statusmeldung im Browser drucken
- Bild abrufen
- Holen Sie einen Audioclip
- Spielen Sie einen Audioclip ab
- Größe des Applets ändern
Zusätzlich stellt die Applet-Klasse eine Schnittstelle bereit, durch die der Betrachter oder Browser Informationen über das Applet erhält und die Ausführung des Applets steuert. Der Betrachter kann −
- Fordern Sie Informationen über den Autor, die Version und das Urheberrecht des Applets an
- Fordern Sie eine Beschreibung der Parameter an, die das Applet erkennt
- Initialisieren Sie das Applet
- Zerstören Sie das Applet
- Starten Sie die Ausführung des Applets
- Beenden Sie die Ausführung des Applets
Die Applet-Klasse stellt Standardimplementierungen jeder dieser Methoden bereit. Diese Implementierungen können bei Bedarf überschrieben werden.
Das "Hello, World"-Applet ist so wie es ist vollständig. Die einzige Methode, die überschrieben wird, ist die Paint-Methode.
Aufrufen eines Applets
Ein Applet kann aufgerufen werden, indem Direktiven in eine HTML-Datei eingebettet werden und die Datei über einen Applet-Viewer oder einen Java-fähigen Browser angezeigt wird.
Das
<html> <title>The Hello, World Applet</title> <hr> <applet code = "HelloWorldApplet.class" width = "320" height = "120"> If your browser was Java-enabled, a "Hello, World" message would appear here. </applet> <hr> </html>
Hinweis − Unter HTML-Applet-Tag erfahren Sie mehr über das Aufrufen von Applets aus HTML.
Das code-Attribut des -Tag abgeschlossen werden.
Wenn ein Applet Parameter akzeptiert, können Werte für die Parameter übergeben werden, indem -Tags zwischen hinzugefügt werden. Der Browser ignoriert Text und andere Tags zwischen den Applet-Tags.
Nicht Java-fähige Browser verarbeiten nicht. Daher ist alles, was zwischen den Tags erscheint und nichts mit dem Applet zu tun hat, in nicht Java-fähigen Browsern sichtbar.
Der Betrachter oder Browser sucht an der Stelle des Dokuments nach dem kompilierten Java-Code. Um etwas anderes anzugeben, verwenden Sie das codebase-Attribut des
<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class" width = "320" height = "120">
Wenn sich ein Applet in einem anderen als dem Standardpaket befindet, muss das haltende Paket im Codeattribut angegeben werden, indem das Punktzeichen (.) verwendet wird, um Paket-/Klassenkomponenten zu trennen. Zum Beispiel −
<applet = "mypackage.subpackage.TestApplet.class" width = "320" height = "120">
Applet-Parameter abrufen
Das folgende Beispiel zeigt, wie ein Applet dazu gebracht wird, auf im Dokument angegebene Setup-Parameter zu reagieren. Dieses Applet zeigt ein Schachbrettmuster aus Schwarz und einer zweiten Farbe.
Die zweite Farbe und die Größe jedes Quadrats können als Parameter für das Applet innerhalb des Dokuments angegeben werden.
CheckerApplet erhält seine Parameter in der Methode init(). Es kann seine Parameter auch in der Methode paint() erhalten. Es ist jedoch praktisch und effizient, die Werte zu erhalten und die Einstellungen einmal beim Start des Applets zu speichern, anstatt bei jeder Aktualisierung.
Der Applet-Viewer oder -Browser ruft die init()-Methode jedes Applets auf, das er ausführt. Der Betrachter ruft init() einmal direkt nach dem Laden des Applets auf. (Applet.init() ist implementiert, um nichts zu tun.) Überschreiben Sie die Standardimplementierung, um benutzerdefinierten Initialisierungscode einzufügen.
Die Methode Applet.getParameter() ruft einen Parameter ab, wenn der Name des Parameters angegeben ist (der Wert eines Parameters ist immer eine Zeichenfolge). Wenn es sich bei dem Wert um numerische oder andere Daten handelt, die keine Zeichen sind, muss die Zeichenfolge analysiert werden.
Das Folgende ist ein Skelett von CheckerApplet.java −
import java.applet.*; import java.awt.*; public class CheckerApplet extends Applet { int squareSize = 50; // initialized to default size public void init() {} private void parseSquareSize (String param) {} private Color parseColor (String param) {} public void paint (Graphics g) {} }
Hier sind die Methoden init() und private parseSquareSize() von CheckerApplet −
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) { // Let default value remain } }
Das Applet ruft parseSquareSize() auf, um den squareSize-Parameter zu parsen. parseSquareSize() ruft die Bibliotheksmethode Integer.parseInt() auf, die einen String parst und eine ganze Zahl zurückgibt. Integer.parseInt() löst eine Ausnahme aus, wenn sein Argument ungültig ist.
Daher fängt parseSquareSize() Ausnahmen ab, anstatt zuzulassen, dass das Applet bei fehlerhafter Eingabe fehlschlägt.
Das Applet ruft parseColor() auf, um den Farbparameter in einen Farbwert zu parsen. parseColor() führt eine Reihe von Zeichenfolgenvergleichen durch, um den Parameterwert mit dem Namen einer vordefinierten Farbe abzugleichen. Sie müssen diese Methoden implementieren, damit dieses Applet funktioniert.
Applet-Parameter festlegen
Das Folgende ist ein Beispiel für eine HTML-Datei mit einem darin eingebetteten CheckerApplet. Die HTML-Datei spezifiziert beide Parameter für das Applet mittels des -Tags.
<html> <title>Checkerboard 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 − Bei Parameternamen wird die Groß-/Kleinschreibung nicht beachtet.
Anwendungskonvertierung in Applets
Es ist einfach, eine grafische Java-Anwendung (dh eine Anwendung, die das AWT verwendet und die Sie mit dem Java-Programmstarter starten können) in ein Applet umzuwandeln, das Sie in eine Webseite einbetten können.
Im Folgenden sind die spezifischen Schritte zum Konvertieren einer Anwendung in ein Applet aufgeführt.
-
Erstellen Sie eine HTML-Seite mit dem entsprechenden Tag, um den Applet-Code zu laden.
-
Geben Sie eine Unterklasse der JApplet-Klasse an. Machen Sie diese Klasse öffentlich. Andernfalls kann das Applet nicht geladen werden.
-
Eliminieren Sie die Hauptmethode in der Anwendung. Erstellen Sie kein Rahmenfenster für die Anwendung. Ihre Bewerbung wird im Browser angezeigt.
-
Verschieben Sie jeden Initialisierungscode aus dem Rahmenfensterkonstruktor in die Init-Methode des Applets. Sie müssen das Applet-Objekt nicht explizit erstellen. Der Browser instanziiert es für Sie und ruft die init-Methode auf.
-
Entfernen Sie den Aufruf von setSize; Bei Applets erfolgt die Größenanpassung mit den Breiten- und Höhenparametern in der HTML-Datei.
-
Entfernen Sie den Aufruf von setDefaultCloseOperation. Ein Applet kann nicht geschlossen werden; es wird beendet, wenn der Browser beendet wird.
-
Wenn die Anwendung setTitle aufruft, eliminieren Sie den Aufruf der Methode. Applets dürfen keine Titelleisten haben. (Sie können natürlich die Webseite selbst mit dem HTML-Title-Tag betiteln.)
-
Rufen Sie setVisible(true) nicht auf. Das Applet wird automatisch angezeigt.
Ereignisbehandlung
Applets erben eine Gruppe von Ereignisbehandlungsmethoden von der Container-Klasse. Die Klasse Container definiert mehrere Methoden, wie beispielsweise processKeyEvent und processMouseEvent, um bestimmte Arten von Ereignissen zu behandeln, und dann eine allumfassende Methode namens processEvent.
Um auf ein Ereignis zu reagieren, muss ein Applet die entsprechende ereignisspezifische 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("initializing the apple "); } public void start() { addItem("starting the applet "); } public void stop() { addItem("stopping the applet "); } public void destroy() { addItem("unloading the applet"); } void addItem(String word) { System.out.println(word); strBuffer.append(word); repaint(); } public void paint(Graphics g) { // Draw a Rectangle around the applet's display area. g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); // display the string inside the rectangle. g.drawString(strBuffer.toString(), 10, 20); } public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { addItem("mouse clicked! "); } }
Lassen Sie uns dieses Applet nun wie folgt aufrufen −
<html> <title>Event Handling</title> <hr> <applet code = "ExampleEventHandling.class" width = "300" height = "300"> </applet> <hr> </html>
Anfänglich zeigt das Applet "Initialisierung des Applets. Starten des Applets" an. Sobald Sie dann in das Rechteck klicken, wird auch "Mausklick" angezeigt.
Bilder anzeigen
Ein Applet kann Bilder im Format GIF, JPEG, BMP und andere anzeigen. Um ein Bild innerhalb des Applets anzuzeigen, verwenden Sie die Methode drawImage() in der Klasse java.awt.Graphics.
Im Folgenden finden Sie ein Beispiel, das alle Schritte zum Anzeigen von Bildern veranschaulicht −
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(); // Display in browser status bar context.showStatus("Could not load image!"); } } public void paint(Graphics g) { context.showStatus("Displaying image"); g.drawImage(image, 0, 0, 200, 84, null); g.drawString("www.javalicense.com", 35, 100); } }
Lassen Sie uns dieses Applet nun wie folgt aufrufen −
<html> <title>The ImageDemo applet</title> <hr> <applet code = "ImageDemo.class" width = "300" height = "200"> <param name = "image" value = "java.jpg"> </applet> <hr> </html>
Wiedergabe von Audio
Ein Applet kann eine Audiodatei abspielen, die durch die AudioClip-Schnittstelle im java.applet-Paket repräsentiert wird. Die AudioClip-Schnittstelle hat drei Methoden, einschließlich −
-
öffentliches Leerspiel() − Spielt den Audioclip einmal von Anfang an ab.
-
öffentliche Void-Schleife() − Bewirkt, dass der Audioclip kontinuierlich wiedergegeben wird.
-
Public Void Stop() − Beendet die Wiedergabe des Audioclips.
Um ein AudioClip-Objekt zu erhalten, müssen Sie die getAudioClip()-Methode der Applet-Klasse aufrufen. Die getAudioClip()-Methode gibt sofort zurück, unabhängig davon, ob die URL in eine tatsächliche Audiodatei aufgelöst wird oder nicht. Die Audiodatei wird erst heruntergeladen, wenn versucht wird, den Audioclip abzuspielen.
Das folgende Beispiel zeigt alle Schritte zum Abspielen eines Audios −
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("Could not load audio file!"); } } public void start() { if(clip != null) { clip.loop(); } } public void stop() { if(clip != null) { clip.stop(); } } }
Lassen Sie uns dieses Applet nun wie folgt aufrufen −
<html> <title>The ImageDemo applet</title> <hr> <applet code = "ImageDemo.class" width = "0" height = "0"> <param name = "audio" value = "test.wav"> </applet> <hr> </html>
Sie können test.wav auf Ihrem PC verwenden, um das obige Beispiel zu testen.
Java