Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 12. Vorlesung WS 2002/2003.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 12. Vorlesung WS 2002/2003."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 12. Vorlesung WS 2002/2003

2 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/032 Übersicht Besprechung der Hausaufgabe Einfache Graphik Fehler-/Ausnahmebehandlung (try-catch-Anweisung)

3 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/033 Hausaufgabe Programmiert eine Anwendung, die eine Temperatur von Celsius nach Fahrenheit und umgekehrt umrechnet. Die Ausgangstemperatur soll interaktiv eingegeben werden. Die Richtung der Berechnung soll über eine Checkbox eingestellt werden. Die Anwendung soll also so oder so ähnlich aussehen: Hinweis: das Programm zur Temperaturumrechnung findet Ihr in Vorlesung 3 (Musterlösung zur Hausaufgabe) Label (wie "Celsius") erzeugt mal mit Eine Checkbox erzeugt man mit. Die Methode boolean getState() der Klasse Checkbox gibt an, ob ein Häkchen da ist (true) oder nicht (false).

4 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/034 Lösung private void button1MouseClicked(java.awt.event.MouseEvent evt) { String CelsiusString = textField1.getText(); double CelsiusDouble; String FahrenheitString = textField2.getText(); double FahrenheitDouble; if( checkbox1.getState() ) { CelsiusDouble = Double.parseDouble(CelsiusString); FahrenheitDouble = CelsiusDouble * 9.0 / 5.0 + 32.0; String s = "" + FahrenheitDouble; textField2.setText(s); } else{/* analog */ } } Vorsicht: äußerst unsicher!

5 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/035 Graphik: Methode "paint" Graphik wird erzeugt durch Überladen der Methode "paint" von "Frame": "paint" wird automatisch bei jedem Neuaufbau des Bildschirms aufgerufen "paint" erhält als Parameter ein Objekt der Klasse "Graphics" Methoden für "Graphics"-Objekt: –drawLine(int x1, int y1, int x2, int y2) –drawPolygon(int[] xPoints, int[] yPoints, int nPoints) –drawString(String str, int x, int y) –setColor(Color.cyan) –...... Paket "java.awt.*" muss importiert werden

6 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/036 Zeichnen in Methode "paint" Beispiel: public void paint(Graphics g) { g.setColor(Color.cyan); g.drawLine(30,40,100,80); g.drawLine(100,80,50,190); }

7 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/037 Methoden der Klasse „Graphics“ drawPolygon(int[] xPoints, int[] yPoints, int nPoints) drawString(String str, int x, int y) drawPolyline(int[] xPoints, int[] yPoints, int nPoints) drawOval(int x, int y, int width, int height) drawRect(int x, int y, int width, int height) fillRect(int x, int y, int width, int height) weitere in JavaDoc

8 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/038 vorher: Größe des Frame ändern public MeinFrame() { initComponents (); pack (); setSize(300,300); }

9 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/039 Übungsaufgabe Erzeugt ein Frame und zeichnet darin die französische Fahne

10 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0310 Alternative: Graphics2D Bessere Behandlung der Geometrie, von Koordinatentransformationen, Farben und Texten Graphics2D statt Graphics in draw (Typumwandlung) Graphics2D hat Methode draw(Shape s) –statt Methoden drawString, drawPolygon, drawPolyline bei Graphics Graphics2D hat Methode fill(Shape s) Shapes können sein: –Polygon, RectangularShape, Rectangle, Area, Line2D, GeneralPath, QuadCurve2D, CubicCurve2D, Ellipse2D,... –Shapes sind eigene Objekte –Paket: java.awt.geom

11 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0311 Beispiel public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Point2D p1 = new Point2D.Double(50,30); Point2D p2 = new Point2D.Double(70,80); Point2D p3 = new Point2D.Double(240,180); Line2D l1 = new Line2D.Double(p1,p2); Line2D l2 = new Line2D.Double(p2,p3); g2d.setColor(Color.cyan); g2d.draw(l1); g2d.draw(l2); }

12 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0312 Klasse „GeneralPath“ Polylinie bzw. Polygon „Unterklasse“ von Shape Methoden: –GeneralPath(): Konstruktor –append(Shape s, boolean connect): Fügt s an –lineTo(float x, float y): Fügt Punkt (x,y) an –closePath(): schliesst Polygon

13 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0313 Beispiel public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Point2D p1 = new Point2D.Double(50,30); Point2D p2 = new Point2D.Double(70,80); Line2D l1 = new Line2D.Double(p1,p2); GeneralPath gp = new GeneralPath(); gp.append(l1,true); gp.lineTo(67,99); gp.closePath(); g2d.setColor(Color.cyan); g2d.draw(gp); g2d.setColor(Color.red); g2d.fill(gp); }

14 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0314 Interaktives Zeichnen in „paint“ bisher: Zeichnen fest in „paint“ programmiert Interaktives Zeichnen: –LinkedList mit Shapes (Attribut des Frame) –„paint“ ruft für jedes Shape in der LinkedList die Methode „draw“ auf –Füllen der LinkedList mit Shapes in anderer Methode (z.B. formMouseClicked(MouseEvent evt)) und neuzeichnen (Methode repaint()).

15 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0315 Methode „Paint“ interaktiv public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Iterator It = z.iterator(); //z ist LinkedList mit Shapes while(It.hasNext()) { Shape s = (Shape) It.next(); //Typkonvertierung g2d.draw(s); g2d.fill(s); }

16 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0316 Ausnahmebehandlung

17 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0317 Motivation: Hausaufgabe für heute private void button1MouseClicked(java.awt.event.MouseEvent evt) { String CelsiusString = textField1.getText(); double CelsiusDouble; CelsiusDouble = Double.parseDouble(CelsiusString);.... } Programm stürzt ab, wenn Benutzer keine Zahl in Testfeld eingibt! Beispiel für eine Exception (Ausnahme)

18 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0318 Ausnahmen in Java Eine Ausnahme (engl. Exception) ist ein Ereignis, das während der Ausführung des Programms auftritt, und den normalen Fluss der Befehle unterbricht. Beispiele für Ausnahmesituationen: bei Berechnungen Division durch Null Mangel an Speicherplatz Zugriff auf Array-Elemente über die Obergrenze hinaus Schreib-/Lesefehler bei Ein- und Ausgabeoperationen –Diskette defekt –Netzwerkverbindung zusammengebrochen –Festplatte voll –zu öffnende Datei nicht vorhanden usw.

19 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0319 Ausnahmebehandlung in Java (I) Java unterstützt explizite Ausnahmebehandlung: –systematische und übersichtliche Trennung von normalem und fehlerbehandelndem Code Methoden können angeben, ob sie bzw. der in ihnen enthaltene Programmcode Ausnahmesituationen feststellen bzw. auslösen können. Im Falle einer Ausnahme wird ein sog. Exception-Objekt erzeugt und an den Aufrufer der Methode übergeben Eine Exception kann als ein durch eine Datenstruktur repräsentiertes Ereignis angesehen werden –Im Falle einer Ausnahmesituation wird diese mit Hilfe der Datenstruktur der Exception gemeldet.

20 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0320 Hausaufgabe (absturzsicher) private void button1MouseClicked(MouseEvent evt) { try{ String CelsiusString = textField1.getText(); double CelsiusDouble; CelsiusDouble = Double.parseDouble(CelsiusString); } catch(java.lang.Exception e) { textField1.setText(„ERROR“); } Hier steht der Programmcode, in dem Fehler auftreten können Reaktion auf Exception hier geht es sicher weiter

21 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0321 Motivation: Beispiel try{ String s = textField1.getText(); double i = Double.parseDouble(s); double d = 22/i; } catch(java.lang.Exception e){ textField1.setText(„ERROR“); } 1. Exception 2. Exception Wie kann differenziert auf jede Art von Exception (kein Double/Division durch 0) reagiert werden?

22 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0322 Lösung: Verschiedene Exception-Klassen try{ String s = textField1.getText(); double i = Double.parseDouble(s); double d = 22/i; } catch(java.lang.NumberFormatException nfe){ textField1.setText(„keine Zahl“); } catch(java.lang.ArithmeticException ae){ textField1.setText(„Division durch 0“); }

23 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0323 Java-Exceptions Exceptions: Unterklasse der Klasse Throwable. Throwable (from lang)

24 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0324 Ausnahmebehandlung: Syntax Ausnahmebehandlung wird in Java über die try-Anweisung realisiert, die aus einem try-Block, einem oder mehreren catch- Konstrukten und optional einem finally-Konstrukt bestehen muss. Syntax: try {... } catch (Exceptiontyp1 name1) {... } catch (Exceptiontyp2 name2) {... } finally {... } Hier steht der Programmcode, in dem Fehler auftreten können Hier werden Fehler der Art Exceptiontyp1 abgefangen Hier werden Fehler der Art Exceptiontyp2 abgefangen Wird durchlaufen, egal ob ein Fehler auftrat oder nicht.

25 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0325 Übung im GIS-Labor Machen Sie folgendes Programm mittels try {...} catch (Exception e) {...} absturzsicher! class Ereignis1 { public static void main (String args[]) { int a; int b = 0; a = 10/b; System.out.println("Programmende wurde erreicht!"); }

26 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0326 Ausnahmebehandlung in Java (III) Eine Methode muss Exceptions, die sie auslöst, nicht selber abfangen; dies kann auch in einer sie aufrufenden Methode erfolgen. –Exceptions werden auf diese Weise durch die Methoden-Aufrufkette quasi „nach oben“ propagiert. –Fängt eine Methode Exceptions nicht selbst ab, sondern leitet sie weiter, so muss die Exception bei der Definition der Methode angegeben werden. Anderenfalls resultiert ein Kompilierfehler. –Beispiel: Rückgabetyp Methodenname (Parameter) throws Exceptionklasse {... } –wird eine Exception auf oberster Ebene weitergereicht, bricht das Programm mit einer sog. Runtime-Exception ab

27 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0327 Vorteile durch Einsatz von Java-Exceptions Trennung des Fehlerbehandlungscodes vom normalen Programm. Höhere Absturzsicherheit von Programmen dadurch, dass Methoden erzwingen können, dass Aufrufer eine Fehlerbehandlung vorsehen müssen auf Grund der Exception-Klassenhierarchie können Fehler entweder gruppiert oder auch differenziert behandelt werden Weiterreichen von Fehlern über verschachtelte Methodenaufrufe hinweg

28 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0328 Beispiel zur getrennten Fehlerbehandlung ohne Exceptions void dateilesen() { öffnen(); if(öffnenok) { dateiInhaltlesen(); if (ok){ interpretieren;... } else fehler; } mit Exceptions try{ öffnen(); dateiInhaltlesen(); interpretieren(); } catch (Exception e) { fehlerbehandlung; }

29 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0329 Übungsaufgabe Schreiben Sie ein Programm, das ein Integer-Array mit 500 Elementen erzeugt. Füllen Sie das Array mit Zufallszahlen, die im Bereich von 0 bis 99 liegen sollen. Anschliessend soll eine Schleife 10000 mal 1.Eine Integer-Zufallszahl von 0 bis 510 erzeugen, 2. welche als Index in das Array verwendet wird und den an der entsprechenden Stelle befindlichen Wert x=a[zufallsindex] ausliest. 3. Dieser Wert x soll als Divisor für eine beliebige Division verwendet werden, z.B.: b = 10 / x Welche Fehler treten bei der Programmausführung auf? Ergänzen Sie das Programm um eine differenzierte Fehlerbehandlung, so dass es nicht mehr abbricht.

30 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0330 Hausaufgabe Schreibt ein Programm, das einen Kreis (mit Radius 50) an jeder Stelle des Frame erzeugt, an die ihr mit der Maus klickt. Hinweise: –nutzt die "interaktive" Methode paint; die zu zeichnenden Objekte werden in einer LinkedList (Attribut Eures Frames) verwaltet –die Klick-Koordinaten stecken in dem ClickEvent –die Methode repaint() von Frame ruft paint() auf. –Kreise sind spezielle Ellipsen


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 12. Vorlesung WS 2002/2003."

Ähnliche Präsentationen


Google-Anzeigen