Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität.

Slides:



Advertisements
Ähnliche Präsentationen
M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Advertisements

programmiert April-Juni 2003 von Knut Riechmann
der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
Ein Beispiel in Java.
Zusammenfassung des Kapitels 8
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Verteilte Software - Java - Prozedurale Programmierung 1
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Internetzugriff mit Strings und Streams
Grundlagen der Programmierung (GP) Prof. Dr. H. Schlingloff Joachim Hänsel
Java: Dynamische Datentypen
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
SWITCH - Anweisung.
AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe.
Verzweigung oder bedingte Anweisung Weiter mit PP.
IF-ELSE-IF-Ketten Weiter mit PP..
Ein Beispiel in Java.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 9 IO – Streams in Java Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
Dynamische Webseiten Java servlets.
Objektorientierte Programmierung JDK-Klassenbibliothek
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Proxy Pattern Vorlesung Design Patterns Sieglinde Heinrich
Vortrag - Kenny Schlör Applets Einführung in die Appletprogrammierung.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Step by step zum JFrame 1 Zum JFrame Step by step by step by step by step by step by step by step by.
© 2005 Pohlig – Taulien: Die Matheamatik-GUI als Applet Come Together 1 April 2005 Was ist ein Applet Ein Applet ist ein Javaprogramm, das die VM benutzt,
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Objektorientierte Modellierung
AWT und JFC Abstract Windowing Toolkit
Applets Java für’s Web.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Socket-Programmierung
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Informatik – Programmierpraktikum Alexander Volodarski Gruppe 14
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Exception Handling in Java
Praxis der Internet-Programmierung
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Optimale Ursprungsgerade
Client-Server-Architektur
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Zwölfte Vorlesung Klassen – Komposition und Vererbung Freitag, 15. November 2002.
Learning By Doing Ereignissteuerung (Events) prozedural ereignisgesteuert Unterprogrammaufruf an fest codierter Stelle Wann immer der Event auftritt, führe.
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Lind 02/2005 Einführung in JAVA. Lind 02/2005 Beispiel: Mittelwert Es soll ein Programm erstellt werden, das den Mittelwert zweier reeller Zahlen berechnet.
Java Thread Scheduling Jin Zhou Proseminar Java Thread Scheduling November 2000.
Beispielanwendung von Java Threads
Programmiervorkurs WS 2014/15 Methoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
 Präsentation transkript:

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität Oldenburg Vorlesung 15 Dietrich Boles

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 2 Gliederung von Vorlesung 15 Ein-/Ausgabe Threads GUI-Programmierung Applets Client-Server-Programmierung RMI Java-Beans

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 3 Ein-/Ausgabe in Java JDK: package java.io; basiert auf dem Konzept der Datenströme DatenquelleFilterDatensenke Eingabe- Datenstrom Ausgabe- Datenstrom Folge von Daten Terminal Datei Zeichenkette Socket...

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 4 Ein-/Ausgabe in Java Unmenge an unterschiedlichen Klassen Wichtige Klassen: –InputStream (abstrakt) –OutputStream (abstrakt) –DataInputStream –BufferedReader –InputStreamReader –DataOutputStream –PrintStream Wichtige Variablen: –System.err (PrintStream) –System.in (InputStream) –System.out (PrintStream)

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 5 Ein-/Ausgabe in Java / Beispiel 1 Eingabe von Tastatur / Ausgabe auf Bildschirm: import java.io.*; public class TerminalIOTest { public static void main(String[] args) { BufferedReader in = null; try { in = new BufferedReader( new InputStreamReader(System.in)); String eingabe = new String(); do { System.out.print("Zahl eingeben: \n"); eingabe = in.readLine(); int zahl = Integer.parseInt(eingabe); System.out.println("danke: " + zahl); } while ((eingabe != null) && (eingabe.length() > 0)); }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 6 Ein-/Ausgabe in Java / Beispiel 1 catch (IOException exc) { System.err.println("Ein-/Ausgabefehler: " + exc); } catch (NumberFormatException exc) { System.err.println("Ein-/Ausgabefehler: " + exc); } finally { try { if (in != null) in.close(); } catch (IOException exc) {} }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 7 Ein-/Ausgabe in Java / Beispiel 2 Eingabe aus Datei: import java.io.*; public class FileIOTest { public static void main(String[] args) { BufferedReader in = null; try { in = new BufferedReader( new FileReader("eingabe.dat")); String eingabe = null; while ((eingabe = in.readLine()) != null) { System.out.println(eingabe); } catch (...) // wie in Beispiel 1...

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 8 Thread Ein Java-Programm mit mehreren Kontrollflüssen (Threads) aber einem Adreßraum zu jeder Zeit ist genau ein Kontrollfluß aktiv das Java-Laufzeitsystem steuert, welcher Thread aktiv ist und wann ein Threadwechsel eingeleitet wird es gibt jedoch auch Steuerungsmethoden für den Programmierer Klasse: java.lang.Thread Probleme: –Synchronisation mehrerer Threads –Kommunikation mehrerer Thread untereinander –Prozessorzuteilung –Verklemmungen (Deadlocks) –...

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 9 Threads / Beispiel 1 2 Threads: public class PingPong extends Thread { String word; int delay; public PingPong(String text, int delay) { this.word = text; this.delay = delay; } public void run() { try { while (true) { System.out.print(this.word + " "); sleep(delay); // warten } } catch (InterruptedException exc) { System.err.println("Interruption: " + exc); return; } }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 10 Threads / Beispiel 1 public static void main(String[] args) { new PingPong("ping", 33).start(); // 1/30 Sek. new PingPong("PONG", 100).start(); // 1/10 Sek. } Ausgabe (nicht deterministisch): ping PONG ping ping PONG ping ping ping PONG ping...

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 11 Threads / Beispiel 2 Synchronisation: import java.util.*; class Konto { private double kontostand; public Konto(double init) { this.kontostand = init; } public synchronized double getKontostand() { return this.kontostand; } public synchronized void einzahlen(double betrag) { this.kontostand = this.kontostand + betrag; // ! Problem: hier Threadwechsel }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 12 Threads / Beispiel 2 public class Sparer extends Thread { Konto konto; public Sparer(Konto konto) { this.konto = konto; } public void run() { try { while (true) { this.konto.einzahlen(new Random().nextDouble()*1000); System.out.println(this.konto.getKontostand()); sleep((long)this.konto.getKontostand()); // warten } } catch (InterruptedException exc) { System.err.println("Interruption: " + exc); return; }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 13 Threads / Beispiel 2 public static void main(String[] args) { Konto konto = new Konto(1000); // beide Sparer haben ein gemeinsames Konto new Sparer(konto).start(); } /* A B K (?) */ }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 14 Threads / Beispiel 3 Thread-Kommunikation: import java.util.*; class Stack { Object[] table; int actual = -1; public Stack(int size) { this.table = new Object[size]; } public synchronized void push(Object elem) { if (actual < (this.table.length-1)) { this.table[++this.actual] = elem; notifyAll(); // wartende Threads informieren } } public synchronized Object pop() { try { while (actual < 0) { wait(); // Warten auf ein Element } return this.table[this.actual--]; } catch (InterruptedException exc) { return null; } }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 15 Threads / Beispiel 3 class Chef extends Thread { Stack akten_haufen; public Chef(Stack haufen) { this.akten_haufen = haufen; } public void run() { try { int nummer = 1; while (true) { String akte = ("Akte " + nummer++); this.akten_haufen.push(akte); System.out.println("Chef: " + akte); sleep((long)(new Random().nextDouble()*1000)); // neue Akte erzeugen } } catch (InterruptedException exc) { System.err.println("Chef interrupted: " + exc); return; } } }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 16 Threads / Beispiel 3 class Knecht extends Thread { Stack akten_haufen; int fleiss; public Knecht(Stack haufen, int fleiss) { this.akten_haufen = haufen; this.fleiss = fleiss; } public void run() { try { while (true) { String akte = (String)this.akten_haufen.pop(); System.out.println("Knecht " + fleiss + ": " + akte); sleep((long)(fleiss*new Random().nextDouble()*100)); // Akten bearbeiten } } catch (InterruptedException exc) { System.err.println("Chef interrupted: " + exc); return; } } }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 17 Threads / Beispiel 3 public class Betrieb { public static void main(String[] args) { Stack akten_haufen = new Stack(10); // ein Chef und zwei Knechte teilen sich den Aktenhaufen new Chef(akten_haufen).start(); new Knecht(akten_haufen, 1).start(); // fleissig new Knecht(akten_haufen, 9).start(); // faul } Ausgabe (nicht deterministisch): Chef: Akte 1 Knecht 1: Akte 1 Chef: Akte 2 Knecht 1: Akte 2 Chef: Akte 3 Knecht 2: Akte 3...

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 18 GUI-Programmierung Graphische Benutzeroberflächen (GUI) JDK: package java.awt; + Unterpackages (Abstract Window Toolkit) JDK 1.0, JDK 1.1: unterschiedliche Klassen und Eventbehandlung JDK 1.2: SWING (komfortable GUI-Klassen) umfaßt mehrere Kategorien: –graphische Elemente: Bilder, Polygone, Farben, Fonts,... –UI-Komponenten (Component): Buttons, Menüs, Texteingabefelder,... –Behälter-Klassen (Container): Windows, Canvases, Dialogboxen,... –Layout-Manager: Kontrolle der räumlichen Anordnung –Event-Behandlung: Mouse-Events, Keyboard-Events, Aktionsevents,... Andere Art der Programmierung: invertierte Programmierung

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 19 GUI-Programmierung / Beispiel 1 Einfachstes Programm: import java.awt.*; public class WindowTest extends Frame { public static void main(String[] args) { WindowTest win = new WindowTest("Test"); win.setSize(300, 100); win.show(); // ab hier arbeitet der EventManger des AWT } public WindowTest(String title) { super(title); add(new Label("Start")); } Test Start

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 20 GUI-Programmierung / Beispiel 2 Event-Behandlung: import java.awt.*; import java.awt.event.*; class ButtonListener implements ActionListener { Button button; public ButtonListener(Button button) { this.button = button; } public void actionPerformed(ActionEvent event) { if (this.button.getLabel().equals("Start")) this.button.setLabel("Stop"); else this.button.setLabel("Start"); } Event-Test Start

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 21 GUI-Programmierung / Beispiel 2 public class EventTest extends Frame { public static void main(String[] args) { EventTest win = new EventTest(Event-Test"); win.setSize(300, 100); win.show(); // ab hier arbeitet der EventManger des AWT } Button button; public EventTest(String title) { super(title); this.button = new Button("Start"); add(this.button, "Center"); // Layout-Manager button.addActionListener(new ButtonListener(button)); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent event) { dispose(); System.exit(0); } } ); }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 22 Applets Applets: Java-Programme, die in einem WWW-Browser ausgeführt werden können JDK: package java.applet; basiert sehr stark auf dem AWT Tool: appletviewer Datei: Uhr.html Aufruf: appletviewer name.html oder in WWW-Browser laden Name Aktuelle Uhrzeit.class width=100 height=100>

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 23 Applets / Beispiel 1 import java.awt.*; import java.applet.*; public class TestApplet extends Applet { private Label label; // wird beim ersten Start aufgerufen (load/reload) public void init() { System.out.println("init()"); } // wird nach init aufgerufen sowie beim erneuten // Besuch einer WWW-Seite public void start() { System.out.println("start()"); this.label = new Label(Test-Label"); this.add(this.label); } // wird beim Stoppen aufgerufen sowie beim Verlassen // einer WWW-Seite public void stop() { System.out.println("stop()"); this.remove(this.label); } // wird nur beim "Zerstoeren" nach stop aufgerufen public void destroy() { System.out.println("destroy()"); } } Netscape: Title Test-Label

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 24 Applets / Beispiel 2 import java.awt.*; import java.applet.*; import java.util.*; public class Uhr extends Applet implements Runnable { protected Thread uhr = null; public void start() { if (uhr == null) { uhr = new Thread(this); uhr.start(); } } public void stop() { uhr.stop(); uhr = null; } public void run() { while (uhr != null) { repaint(); try { uhr.sleep(1000); } catch(Exception e){} }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 25 Applets / Beispiel 2 public void paint(Graphics g) { // Applet-"main" Date jetzt = new Date(); String str = jetzt.getHours() + ":" + jetzt.getMinutes() + ":" + jetzt.getSeconds(); g.drawString(str, 25, 20); } Uhr Aktuelle Uhrzeit.class width=200 height=100> Netscape: Uhr 16:47:39 Aktuelle Uhrzeit

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 26 Windows + Applets import java.awt.*; import java.applet.*; public class TestWindowApplet extends Applet { private Label label; public static void main(String[] args) { TestWindow win = new TestWindow("Test-Window"); win.setSize(300, 100); win.show(); } public void start() { this.label = new Label(Test-Label"); this.add(this.label); } public void stop() { this.remove(this.label); } }

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 27 Windows + Applets class TestWindow extends Frame { public TestWindow(String title) { super(title); TestWindowApplet applet = new TestWindowApplet(); applet.start(); add(applet, "Center"); } java TestWindowApplet über HTML-Seite in Netscape laden Test-Window Test-Label Netscape: Title Test-Label

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 28 Client-Server Programmierung Client-Server-Programme: Programme, die auf unterschiedlichen Rechner laufen (können) und miteinander kommunizieren JDK: package java.net; charakteristisch: –mehrere Prozesse –kein gemeinsamer Adreßraum –Datenaustausch via Kommunikation (über Sockets) Server: Programm, das bestimmte Dienste mehreren ihm im allgemeinen unbekannten Clients anbietet (bspw. Drucker) Client: Programm, das Server-Dienste nutzen will

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 29 Client-Server Programmierung / Beispiel import java.io.*; import java.net.*; public class Server { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(5555); Socket s; while ((s = ss.accept()) != null) { BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream())); String eingabe = null; while ((eingabe = in.readLine()) != null) { System.out.println(eingabe); } } } catch (Exception e) { System.err.println("Fehler: "+e); } } } // liest Daten von Clients und gibt sie aus

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 30 Client-Server Programmierung / Beispiel import java.io.*; import java.net.*; public class Client { public static void main(String[] args) { try { Socket s = new Socket(jeddeloh", 5555); PrintWriter sout = new PrintWriter(s.getOutputStream()); for (int i=0; i<args.length; i++) { sout.println(args[i]); sout.flush(); } } catch (Exception e) {System.err.println("Fehler: "+e);} } } // schickt Argumente zum Server

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 31 Remote Method Invocation (RMI) Motivation: Alternative zur Realisierung von Client-Server-Programmen Idee: –Aufruf von Methoden von Objekten, die auf anderen Rechnern laufen –Datenaustausch via Parameter und Rückgabewerten –ähnlicher Ansatz: CORBA (sprachunabhängig) zusätzliche Werkzeuge erforderlich: JDK-package, Compiler, Broker Rechner A Rechner B Client Server Turn t = spieler.nextTurn(); nextTurn(); spieler

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 32 Java Beans Technologie für Software-Komponenten Ziel: Programme (Komponenten) schreiben, die überall laufen und überall wiederverwendet werden können in Java: Komponenten (Beans) = spezielle Objekte Konkurrenz: ActiveX von Microsoft Motivation: Anwendungsprogrammierer holt sich benötigte (binäre!) Beans und verknüpft sie (u.U. mit graphischen Hilfsmitteln) zu einem Gesamtprogramm (Container) Beispiele für Beans: –Buttons– Rechtschreibprüfung –Scrollbars – Textverarbeitung –Zeitgeber –...

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 33 Java Beans Bean Development Kit (BDK): –package java.beans; –Bean-Beispiele –einfacher graphisch-interaktiver Test-Container (BeanBox) –komplette Sourcen –Dokumentation besondere Merkmale / Eigenschaften / Dienste: –Verwaltung von Eigenschaften (Properties = besondere Attribute) –Introspektion (Zugriff auf Struktur von Komponenten) –Ereignisbehandlung –Persistenz (dauerhaftes Abspeichern von Objektzuständen) –Unterstützung für die Anwendungsentwicklung (Entwicklungswerkzeuge)