Virtuelle Lehrerweiterbildung Informatik in Niedersachsen Java-Applets mit J++ Eckart Modrow S. 1 1. Erzeugen eines neuen leeren Applets Applets sind Java-Programme, die in einem Browser ablaufen. Zu diesem Zweck gehört zum Applet immer eine HTML-Seite, die das Applet aufruft. Mit J++ können wird beides (Applet und HTML-Seite) zusammen erzeugen. Dazu starten wir J++ und wählen den Menüpunkt Datei Æ Neues Projekt Darin • wählen wir Applet für HTML (voreingestellt) • vergeben einen aussagekräftigen Namen, z.B. Ballspiel • und wählen als Pfad ein geeignetes Verzeichnis unter Laufwerk u:/Java Danach klicken wir den Button Öffnen an. Wir erhalten einen Bildschirm, der im wesentlichen leer ist. An der Seite befindet sich die Projektmappe mit dem gewählten Namen, die, wenn wir sie öffnen (Anklicken des <+>Symbols), zwei Dateien anzeigt: Applet1.java und Page1.htm, die benötigten Dateien. Doppelklicken wir auf eine der Seiten, dann erscheint deren Quelltext im großen Fenster. Das Projekt enthält jetzt ein lauffähiges Applet, das wir direkt übersetzen und ausführen können. Wir klicken dazu den Pfeil (►) in der oberen Befehlsleiste an. Nach kurzer Zeit erscheint das Applet im Browser. Virtuelle Lehrerweiterbildung Informatik in Niedersachsen Java-Applets mit J++ Eckart Modrow S. 2 2. Die HTML-Startdatei Die HTML-Datei kann in drei Versionen angezeigt werden: Entwurf, Quelle und Vorschau. In der Quelle-Version wird der HTML-Text angezeigt. Wenn das zu startende Applet schon übersetzt ist, dann wird es auch in dieser Darstellung angezeigt. Wollen wir das nicht, dann klicken wir mit der rechten Maustaste auf das Applet und wählen die Option <Immer als Text anzeigen>. Es erscheint dann das Start-Tag des Applets. Unsere HTML-Seite enthält den Text: <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY> <P>&nbsp;</P> <!-- Fügen Sie hier HTML hinzu --> <applet weitgehend überflüssig! code=Applet1.class name=Applet1 width=320 height=200 VIEWASTEXT> <param name=label value="Diese Zeichenfolge wurde vom HTML-Host übergeben."> <param name=background value="008080"> <param name=foreground value="FFFFFF"> </applet> </BODY> </HTML> Da das Applet „schon etwas tut“, sind einige Anweisungen speziell. Wir lassen sie erst mal weg und erhalten eine sehr einfache Seite: Virtuelle Lehrerweiterbildung Informatik in Niedersachsen Java-Applets mit J++ Eckart Modrow S. 3 <HTML> Das Applet-Tag <HEAD></HEAD> <BODY> <applet code=Applet1.class width=320 height=200> </applet> </BODY> </HTML> Codedatei des Applets Größe des Applets 3. Die Java-Datei Die Java-Datei enthält noch viel mehr (erst mal) überflüssige Anweisungen, so dass wir fasst alles weglassen können. Wir erhalten das Minimalgerüst eines Applets (das nichts tut): import java.awt.*; benutzte Bibliotheken (immer angeben) import java.applet.*; public class Applet1 extends Applet { das Applet } Damit überhaupt etwas passiert, fügen wir jetzt einen Zeichenbefehl ein (die „Theorie“ dazu folgt später). import java.awt.*; import java.applet.*; public class Applet1 extends Applet { public void paint(Graphics g) { g.drawLine(10,10,100,100); } } Damit erhalten wir eine Linie vom Punkt (10/10) zum Punkt (100/100). Wir haben den Grafik-Kontext g „gebeten“, eine entsprechende Linie zu zeichnen. Wenn wir eine Linie zeichnen können, dann stehen uns alle grafischen Möglichkeiten offen! Virtuelle Lehrerweiterbildung Informatik in Niedersachsen Java-Applets mit J++ Eckart Modrow S. 4 4. Ausführung im Applet-Viewer Statt im Browser können Applets (und Anwendungen) auch im Viewer JView.exe angezeigt werden. Die Ladezeiten sind dann wesentlich geringer. Man muss diese Option unter dem Menüpunkt Projekt ÆEigenschaften auswählen. Wählen Sie benutzerdefiniertes Starten und geben sie JView.exe als Startprogramm an. Als Argumente übergeben Sie ähnlich wie in der HTML-Datei bei Applets die Option /a und die Größe des Applets über width und height. Virtuelle Lehrerweiterbildung Informatik in Niedersachsen Java-Applets mit J++ S. 5 Eckart Modrow 5. Übersetzen von Programmen Man schreibt ein Java-Applet im Editor. Schon bei der Eingabe werden sehr viele Fehler von J++ erkannt und angezeigt (durch „Unterkringeln“). Manchmal muss man ein bisschen warten, damit sich J++ den Text „ansehen“ kann. Typische Fehler sind • falsche Groß-/Kleinschreibung • falsche Klammerstruktur („Klammer fehlt“) • Fehler in den Parameterlisten („ein Wert zu viel“) • Typfehler („Zahl statt Zeichen“) Übersetzt man das Programm, dann werden gefundene Fehler im Fenster Aufgabenliste angezeigt. Klickt man auf die Fehleranzeige, dann springt der Cursor in die entsprechende Zeile. Während der Eingabe blendet J++ mögliche Optionen ein. Schreibt man also z.B. „g.“ (d.h. g und „Punkt“) und wartet einen Augenblick, dann erscheint ein Fenster mit den möglichen Methoden von g, den „Befehlen“. Wählt man eine Methode aus und tippt die öffnende Klammer, dann erscheint eine Liste mit den notwendigen Parametern. Durch Verbessern der Fehler und erneutes Übersetzen erhält man schrittweise ein Programm, das frei von Syntaxfehlern ist und übersetzt werden kann. Der Java-Compiler (Übersetzer) erzeugt dann aus der Quellcode-Datei nnn.java eine Code-Datei nnn.class, die auf der HTML-Seite angegeben wird. Die Class-Datei enthält Code für die virtuelle Maschine von Java (die Java-VM, einen „Modellcomputer“), die in den verschiedenen Browsern enthalten ist. Da alle diese virtuellen Maschinen den gleichen Code „verstehen“, können JavaProgramme auf allen diesen Rechnern unabhängig vom Betriebssystem ablaufen. (Leider arbeiten die verschiedenen Java-VMs nicht völlig identisch, so dass die Ergebnisse des gleichen Applets durchaus unterschiedlich ausfallen können.) import java.awt.* import … class test extends .. { int I=0; ….. } Quellcode (in nnn.java) Übersetzung durch J++ LDA 0 STA (234) …. Javacode (in nnn.class) Interpretation durch die virtuelle Java-Maschine 00100111101 11010010100 01010101101 …… ausführbarer Code (rechnerspezifisch) Logische Fehler befinden sich meist auch in dem Programm. Diese können beim Debuggen (Fehlersuche) gefunden werden, wenn ein Programm schrittweise ausgeführt wird (F11) und die aktuellen Werte der Variablen im Überwachungsfenster verfolgt werden. Virtuelle Lehrerweiterbildung Informatik in Niedersachsen Java-Applets mit J++ Eckart Modrow S. 6 6. Aufbau eines Applets Man erzeugt ein neues Applet (z.B. mit dem Namen Applet1), indem man eine neue Klasse aus der Mutterklasse Applet ableitet: public class Applet1 extends Applet {...}. Damit die Mutterklasse gefunden wird, muss man vorher die Bibliothek (Package) angeben, in sie sich befindet: import java.applet.*; Bei Bedarf folgen weitere Packages, z.B. mit import java.awt.*; (Informationen zur „richtigen“ objektorientierten Programmierg OOP folgen später!) Programmiert wird, indem die (leeren) Standardmethoden der Applet-Klasse durch eigene Methoden überschrieben (ersetzt) werden. Standardmethoden sind z.B. • init() wird anfangs einmal ausgeführt. • start() wird bei jedem Neustart ausgeführt ausgeführt. • stop() wird am Ende ausgeführt. Weil wir meist mit Grafik arbeiten wollen, müssen wir noch die Zeichenmethode überschreiben, die einen Grafikkontext g bereitstellt, den wir uns als ein Zeichenblatt vorstellen können, das einen Stift, einen Pinsel, ein Textwerkzeug usw. enthält. • paint(Graphics g) Die Methoden werden beim Start des Applets automatisch aufgerufen. Wir erhalten damit das Gerüst eines Applets: import java.awt.*; import java.applet.*; public class Applet1 extends Applet { public void init() { // z.B. Initialisierungen } public void start() { // z.B. Hintergrund neu zeichnen } public void paint(Graphics g) { // Grafikbefehle } public void stop() { // braucht man nur selten } } Kommentare kann man in Java mit einem Doppelstrich (//) einleiten. Der restliche Text der Zeile wird dann vom Java-Übersetzer überlesen. Virtuelle Lehrerweiterbildung Informatik in Niedersachsen Java-Applets mit J++ Eckart Modrow S. 7 7. (einige) Grafikbefehle clearRect(int,int,int,int) draw3DRect(int,int,int,int,boolean) drawArc(int,int,int,int,int,int) drawLine(int,int,int,int) drawOval(int,int,int,int) drawPolygon(int[],int[],int) drawRect(int,int,int,int) drawRoundRect(int,int,int,int,int,int) drawString(string,int,int) fill3DRect(int,int,int,int,boolean) fillArc(int,int,int,int,int,int) fillOval(int,int,int,int) fillPolygon(int[],int[],int) fillRect(int,int,int,int) fillRoundRect(int,int,int,int,int,int) setColor(Color) setXORMode(Color) setPaintMode(Color) löscht ein Rechteck zeichnet ein Rechteck zeichnet einen Kreisbogen zeichnet eine Linie zeichnet eine Ellipse zeichnet ein Polygon zeichnet ein Rechteck zeichnet ein abgerundetes Rechteck zeichnet einen Text zeichnet ein gefülltes Rechteck zeichnet einen gefüllten Kreisbogen zeichnet eine gefüllte Ellipse zeichnet ein gefülltes Polygon zeichnet ein gefülltes Rechteck zeichnet ein gefülltes abger. Rechteck setzt die Zeichenfarbe setzt den invertierenden Zeichenmodus setzt den „normalen“ Zeichenmodus 8. Das Hilfesystem Die genaue Arbeitsweise und die Bedeutung z.B. der Parameter erhält man durch das Hilfesystem von J++. Man setzt dazu den Cursor im Editor auf einen Befehl und drückt die F1Taste. Danach erhält man eine Liste von passenden Hilfethemen. Im Feld Aktive Untermenge sollte man die Option Visual J++-Dokumentation wählen, um Hilfe zu anderen Programmiersprachen (C++, Visual Basic, ...) usw. auszublenden. Man wählt einen Java-Bezug aus. Mit der Option Class Members oben auf der Seite kann man die Details (Methoden, Eigenschaften) anzeigen lassen.