Doppelnutzung als Applet und Applikation Man kann ein Java-Programm auch so schreiben, dass es sowohl als Applet innerhalb einer Web-Page als auch als lokale Applikation ausgeführt werden kann. Zu diesem Zweck muss das Programm – eine Subklasse von Applet sein und – eine main-Methode enthalten. – Die main-Methode wird nur bei Aufruf als Applikation ausgeführt und im Applet ignoriert. Sie muss ein Frame (als Ersatz für das Fenster des Web-Browsers) erzeugen und in diesem ein Objekt des Applet einfügen und dann die init- und start-Methoden des Applet aufrufen, die den Inhalt des Applet darstellen. – Ausserdem sollte ein WindowListener implementiert werden, der beim Schliessen des Frame die Applikation beendet (analog zum Schliessen des Web-Browsers). – Falls das Applet eine stop-Methode enthält, muss diese von der Applikation vor deren Beendigung aufgerufen werden. Flury / Huonker / Jud 8 AppApp Beispiel f.setLayout( new BorderLayout() ); import java.awt.*; a.init(); import java.awt.event.*; f.add (a, "Center"); import java.applet.*; f.setSize(300,200); f.addWindowListener( a ); public class AppApp extends Applet f.setVisible(true); implements WindowListener { a.start(); } public void init() { public void windowClosing (WindowEvent e) { setLayout( new FlowLayout() ); this.stop(); Label hello = new Label("Hello World!"); System.exit(0); add(hello); } // add more content ... public void windowClosed (WindowEvent e) { } setVisible(true); public void windowOpened (WindowEvent e) { } } public void windowIconified (WindowEvent e) { } public void windowDeiconified (WindowEvent e) { } public static void main (String[] args) { public void windowActivated (WindowEvent e) { } AppApp a = new AppApp(); public void windowDeactivated (WindowEvent e) { } Frame f = new Frame("AppApp"); } Flury / Huonker / Jud 9 Umwandlung Applet > Applikation • Methode init() in einen Konstruktor (d.h. gleicher Name wie Klasse) ohne Parameter umwandeln, Returntyp entfernen. • extends Applet durch extends Frame ersetzen • Main-Methode schreiben: public static main(String[] args) • muss static sein • muss ein Objekt der Klasse (d.h. des Programms) erzeugen das entsprechende Frame wird erzeugt • muss Grösse der Frames setzen mit setSize(breite, hoehe); • muss Frame sichtbar machen mit setVisible(true); • import der Klasse Applet löschen • WindowListener implementieren und Applikation bei sich selbst als WindowListener registieren mit this.addWindowListener(this); • Layout-Manager auf FlowLayout ändern, falls gewünscht (Default für Frames ist BorderLayout) mit setLayout(new FlowLayout()) • Kontrollieren, ob keine Methode der Applet-Klasse verwendet wurden. Flury / Huonker / Jud 10