Einführung in Java Andreas Rozek Rechenzentrum Uni Stuttgart

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

programmiert April-Juni 2003 von Knut Riechmann
Seminar Internet-Technologien : Java
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Ein Beispiel in Java.
Einführung in die Programmierung Zusammenfassung
Internetzugriff mit Strings und Streams
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Programmierung grafischer Oberflächen
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Programmierung grafischer Oberflächen
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
Ein Beispiel in Java.
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.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
AWT – Detailbetrachtung Java 3D – Seminar im Wintersemester 2002/2003 Christian Schneider.
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Einführung in Visual C++
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Einführung in das Programmieren mit JavaScript Mag. Andreas Starzer weloveIT – EDV Dienstleistungen.
AWT und JFC Abstract Windowing Toolkit
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
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,
Java: Programmierung grafischer Oberflächen
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Java und Eclipse.
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
PI Burgenland Java und JavaScript 1. Teil
Mittwoch Informatik II, 1. Teil
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs Übung Besprechung der Hausaufgabe
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Einführung in die OOP in Java
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
GUI Programmierung in Java Branimir Djordjevic. GUI - Wichtige Begriffe -  Die Swing-Bibliothek in Java stellt zum Beispiel die folgenden Windows zur.
Java Programme nur ein bisschen objektorientiert.
JAVA - Einführung. © Übersicht Hintergrund und Geschichte Wie sieht ein JAVA Programm aus ? Was ist ein JAVA Programm ? Wie schreibt/übersetzt.
Abstract Windowing Toolkit
Abstract Windowing Toolkit
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Implementieren von Klassen
 Präsentation transkript:

Einführung in Java Andreas Rozek Rechenzentrum Uni Stuttgart 05.07. bis 09.07.1999 Einführung in Java Andreas Rozek Rechenzentrum Uni Stuttgart Abteilung PKB Telefon: (0711) 685-4514 Email: Rozek@RUS.Uni-Stuttgart.De http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Organisatorische Details Fragebogen Anwesenheitsliste Teilnahmebescheinigung (nur bei ständiger Teilnahme) http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Programmübersicht 1. Java im Überblick 2. Programmieren in Java 3. Java und das World-Wide Web 4. Die „Java Foundation Classes“ 5. Java‘s Welt

„Lernziele“ Java im Überblick - Überblick über Möglichkeiten und Grenzen - Vorbereitung auf die Arbeit mit Java Programmieren in Java - Erstellen Text-orientierter Programme - Interaktion mit Laufzeitumgebung und anderen Prozessen - Zugriff auf Dateien und Dateisysteme

„Lernziele“ (Fortsetzung) Java und das World-Wide Web - einfache grafische Benutzeroberflächen - Erstellen/Veröffentlichen von Applets - Kommunikation via Netzwerk die „Java Foundation Classes“ - „professionelle“ Bedienoberflächen - Erstellen von „visuellen Komponenten“ - Zwischenablage, „Drag-and-Drop“ - Ausgabe auf einen Drucker

„Lernziele“ (Fortsetzung) Java‘s Welt - Überblick über vorhandene bzw. geplante Klassenbibliotheken - Überblick über weitere Laufzeitumgebungen und Produkte

Einführung in Java Java im Überblick Teil I http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Java im Überblick Entwicklungsgeschichte wesentliche Merkmale der Sprache Vergleich mit JavaScript (ECMAScript) unterstützte Plattformen und Umgebungen Möglichkeiten und Grenzen aktuelle Trends, laufende Entwicklungen Entwicklungsumgebungen Informationsquellen, Literatur http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Wie alles begann... 1990 erste Studien zu Programmiersprache und Betriebssystem für „embedded systems“ - Haushaltsgeräte - Hifi- und Videoelektronik, Set-Top Boxen - Kommunikationsgeräte, Organizer Anforderungen: - Robustheit und Stabilität - Plattformunabhängigkeit - Realisierbarkeit benutzerfreundlicher Bedieneroberflächen C++ ist zu komplex und fehleranfällig Siehe http://www.javasoft.com/nav/whatis/index.html man stelle sich vor: - „segmentation fault, core dumped“ für ein Fernsehgerät - „allgemeine Schutzverletzung“ für eine Waschmaschine

Wie alles begann... (Fortsetzung) 1991 Entwicklung der Programmiersprache Oak 1993 Industrie ist nicht interessiert NCSA Mosaic erscheint, das WWW gewinnt an Popularität 1994 Oak-Compiler und WWW-Browser in Oak 1995 Oak wird in Java umbenannt Netscape lizensiert Java 1996 Version 1.0 wird freigegeben Bildnachweis: - http://www.javasoft.com/images/misc/duke.waving.gif

Wesentliche Merkmale von Java „Java: A simple, object-oriented, network-savvy, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic language.“ (Zitat aus einem „Whitepaper“ von Sun)

Java ist... Einfach Java-Syntax ähnlich der von C++  einfacher Umstieg für Programmierer Beschränkung auf wesentliche Sprachmerkmale  einfache Compiler, kompakte Programme automatische Speicherverwaltung  einfache Programme  kein Verlust von Ressourcen „echte“ Zeichenketten und Felder  keine Gefahr der Feldgrenzenüberschreitung

Java ist... (Fortsetzung) Objekt-orientiert Klassen und Objekte, einfache Vererbung abstrakte Klassen und „Interfaces“ Attribute und Methoden (für Klassen und Objekte) Polymorphie Klassenbibliotheken einstellbare Sichtbarkeit von Bezeichnern „innere“ und „anonyme“ Klassen

Java ist... (Fortsetzung) Kommunikativ („network-savvy“) die Protokolle - TCP/IP und UDP/IP (unicast und multicast) - HTTP und FTP sind bereits implementiert Applets laden ihre Klassen „aus dem Netz“ Unterstützung von verteilten Systemen - Remote Method Invocation - CORBA - Java Shared Data Toolkit JSDT - (und weitere) „network-savvy“ heißt ungefähr soviel wie „Netzwerk-verständig“, d.h., Java „versteht“ etwas von Netzwerken

Java ist... (Fortsetzung) Robust strenge Typ-Überprüfung durch den Compiler Versionskontrolle beim Laden von Klassen keine Adressen bzw. Pointer nicht abschaltbare Feldgrenzenüberwachung Sicher Security-Manager (für Applets, „sandbox model“) Zertifizierung möglich Byte Code Verification Zertifizierung von Applets wird derzeit noch nicht von allen Web-Browsern unterstützt

Java ist... (Fortsetzung) Architektur-unabhängig Plattform-unabhängiger Bytecode  Virtuelle Maschine interpretiert Bytecode  Kompilat läuft auf jeder Plattform unabhängig von „big/middle/little endian“  ermöglicht Austausch von Binärdaten Portabel keine implementations-abhängigen Teile POSIX-basierte System-Schnittstelle Das Konzept der virtuellen Maschine und des (von einem Compiler erstellten) Zwischencodes findet sich z.B. auch bei UCSD-PASCAL sowie frühen MODULA-Implementierungen

Java ist... (Fortsetzung) Schnell Compiler unterstützt Code-Optimierungen („inlining“, Verwerfen von ungenutztem Code) Klassen werden nur bei Bedarf geladen („late binding“) „just-in-time“-Kompilierung möglich (Portabilität bleibt unbeeinflußt) wohldefinierte Schnittstelle zu externen Bibliotheken („native code“) Es laufen auch Entwicklungen von Microcontrollern, die den Java Bytecode unmittelbar ausführen

Java ist... (Fortsetzung) Multi-Threaded einfache Programmierung von Applikationen mit mehreren Threads Synchronisation von Threads ist Bestandteil der Programmiersprache! Laufzeitsystem basiert selbst auf multi-threading Dynamisch Interfaces erlauben verteilte Programmierung Klassen werden zur Laufzeit geladen

JavaScript (im Vergleich zu Java) interpretierte Makrosprache Quelltext in HTML eingebettet (kein Compiler, keine Bibliotheken) Objekt-“basiert“ (vorgegebene Klassen und Objekte) Protoyp-basierte Vererbung Funktionsobjekte, spezielle HTML-spezifische Funktionen Syntax ähnlich der von Java

Unterstützte Plattformen (Auswahl) Windows 95/NT SunOS 5.x IRIX 5.x, 6.x MacOS 7.x,8.x LINUX, FreeBSD (WindowsCE, PalmOS) Systeme mit Java-fähigen WWW-Browsern auf die Versionsnummer der Java-Laufzeitumgebung achten!

Unterstützte Plattformen (Forts.) Java Ring (http://www.ibutton.com/store/index.html#jring) Java für Chip-Karten (Siemens) Java für Steuerrechner (z.B. PSC1000) (http://www.thame.memec.com/Patriot/overview.htm)

Alternative Implementierungen Microsoft VM (JView) (http://www.microsoft.com/java) enthält etliche Windows-spezifische Erweiterungen Transvirtual Kaffe (http://www.transvirtual.com) kann sowohl Sun-kompatible als auch Microsoft-kompatible Programme verarbeiten

Versionsnummern 1.0.2 (veraltet, jedoch beliebt für Applets) 1.1.x (Auslaufmodell, derzeit 1.1.7, 1.1.8) 1.2.x (aktuell, derzeit 1.2.1) Bugfix Release (keine API-Änderungen) Version (API-Änderungen/Erweiterungen)

Laufzeitumgebungen

„Standard“-Bibliotheken (Java 2) Abstract Windows Toolkit, Swing Java Foundation Classes (JFC) Java IDL Java DataBase Connection (JDBC) JavaBeans Remote Method Invocation (RMI) Java2D Bildnachweise: - Optische Bank: http://www.phs.uiuc.edu/Osa/edu/table.html - Golfsimulation: http://www.cruzio.com/~sabweb/arcade/golf.html - 3D-Visualisierung: http://www.aa.net/~vladi/java/graph3D/graph3D.htm

„Standard“-Erweiterungen Java Naming and Directory Interface (JNDI) JavaMail, Java Management, InfoBus Java3D, Java Media Framework Java Advanced Imaging Java Servlet Java Cryptography Extension (JCE) JavaHelp Java Serial Port (COMM) Bildnachweise: - Optische Bank: http://www.phs.uiuc.edu/Osa/edu/table.html - Golfsimulation: http://www.cruzio.com/~sabweb/arcade/golf.html - 3D-Visualisierung: http://www.aa.net/~vladi/java/graph3D/graph3D.htm

Java für „Embedded Systems“ Java 2 Platform, Micro Edition (Java2ME) K Virtual Machine PersonalJava (für Organizer und PDAs) EmbeddedJava (für Steuerrechner) Java Card (für Chip-Karten) JavaOS JavaPC (für ältere PCs) Bildnachweise: - Optische Bank: http://www.phs.uiuc.edu/Osa/edu/table.html - Golfsimulation: http://www.cruzio.com/~sabweb/arcade/golf.html - 3D-Visualisierung: http://www.aa.net/~vladi/java/graph3D/graph3D.htm

Java und das World-Wide Web Java PlugIn HotJava Browser HotJava HTML Component Java WebServer Java Embedded Server (NanoServer) Bildnachweise: - Optische Bank: http://www.phs.uiuc.edu/Osa/edu/table.html - Golfsimulation: http://www.cruzio.com/~sabweb/arcade/golf.html - 3D-Visualisierung: http://www.aa.net/~vladi/java/graph3D/graph3D.htm

Sonstige Entwicklungen (Auszug) JavaTelephony Java Shared Data Toolkit (JSDT) JavaSpeech Jini (siehe http://java.sun.com/products/index.html) Bildnachweise: - Optische Bank: http://www.phs.uiuc.edu/Osa/edu/table.html - Golfsimulation: http://www.cruzio.com/~sabweb/arcade/golf.html - 3D-Visualisierung: http://www.aa.net/~vladi/java/graph3D/graph3D.htm

Einsatzmöglichkeiten WWW-basierte Programme Navigationshilfen Visualisierung von Daten Simulationen VRML-Scripting Animationen Audio Bildnachweise: - Optische Bank: http://www.phs.uiuc.edu/Osa/edu/table.html - Golfsimulation: http://www.cruzio.com/~sabweb/arcade/golf.html - 3D-Visualisierung: http://www.aa.net/~vladi/java/graph3D/graph3D.htm

Einsatzmöglichkeiten (Fortsetzung) Grafische Benutzeroberflächen (ggfs. „FrontEnds“ für externe Programme)

Einsatzmöglichkeiten (Fortsetzung) Rapid Prototyping Verteilte Applikationen Bildnachweise: - MoleculeViewer: Standard-Beispiel des Sun JavaSDK - CyberAnatomy http://reality.sgi.com/sambo/Oobe/CyberAnatomy/intro.html

Die Grenzen von (reinem) Java zeitkritische (Echtzeit-)Applikationen Numerik (Zugriff auf Arrays) Inspektion der lokalen Dateisysteme (Zugriff auf Parallel-/Seriell-Schnittstellen) Zugriff auf Umgebungsvariablen (oder die Windows Registrierdatenbank) andere Transportprotokolle (z.B. ICMP) Plattform-spezifische Eigenheiten (Clipboard, Drag‘n‘Drop, Fonts)

Entwicklungsumgebungen Sun‘s Java SDK Microsoft Visual J++ IBM VisualAge for Java Borland JBuilder Symantec Café Sun Java Workshop

Sun‘s Java SDK Bedienung über Kommandozeilen - Compiler, Debugger, Tools - Dokumentation im HTML-Format für Windows 95/NT und SunOS 5.x stets die neueste Version kostenlos im Internet verfügbar Laufzeitumgebung JRE

Microsoft Visual J++ an Java angepaßtes Developer-Studio nur für Windows 95/NT sehr schneller Compiler mit strengem Syntax-Check sehr komfortable grafische Oberfläche voller Zugriff auf Windows 95/NT über Microsoft-spezifische Bibliotheken kostenlos im Internet verfügbar nicht Standard-konform Bildernachweis: - http://www.microsoft.com/library/images/gifs/prodref/boxshot/7941f.sm.jpg

IBM VisualAge for Java grafische Entwicklungsumgebung gewöhnungsbedürftige Benutzeroberfläche eingeschränkte Version kostenlos im Internet verfügbar Bildnachweise: - http://www.channelblaster.com/jb_vs_va/images/VisualDev_figure1.gif - http://www.channelblaster.com/jb_vs_va/images/VisualDev_figure2.gif

Borland JBuilder ähnlich Delphi bzw. Borland C++ unterstützt JavaBeans Ressourcen-hungrig Bildernachweise: - http://www.channelblaster.com/jb_vs_va/images/IDE_figure1.gif - http://www.channelblaster.com/jb_vs_va/images/IDE_figure2.gif - http://www.channelblaster.com/jb_vs_va/images/IDE_figure3.gif

Sun Java Workshop/Java Studio Entwicklungsumgebung in Form eines WWW-Browsers in Java realisiert (sehr langsam) Bedienung gewöhnungsbedürftig Bildernachweise: - http://www.sun.com/studio/images/JS_BeanDust.gif - http://www.sun.com/workshop/java/images/mybizmain.gif

Informationsquellen www.javasoft.com Entwicklungsumgebung, Tutorials, ... www.gamelan.com Quelltexte und Informationen www.microsoft.com Microsoft‘s Java-Entwicklungen developer.javasoft.com/developer/ Java Developer Connection

News-Gruppen (7 aus 11) comp.lang.java.beans comp.lang.java.corba comp.lang.java.databases comp.lang.java.gui comp.lang.java.programmer comp.lang.java.security comp.lang.java.softwaretools

Tips zum Kauf von Literatur unbedingt auf 1.1 achten Hinweise (Auszug): Druckerunterstützung Zwischenablage (Clipboard) Serialisierung von Objekten David Flanagan „Java in a Nutshell“ „Java Examples in a Nutshell“ O´Reilly Verlag Bildernachweis: - http://www.oreilly.com/catalog/covers/javanut2.s.gif

Viel Spaß beim Stöbern!

Die Programmiersprache Java Einführung in Java Teil II Die Programmiersprache Java http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Die Programmiersprache Java Syntax und Semantik Erstellen eines lauffähigen Programmes Interaktion mit der Laufzeitumgebung Zugriff auf Dateisysteme Ein-/Ausgabe von/auf Dateien  Text-orientierte (eigenständige) Programme http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Programmieren mit Objekten Prozeduraler Ansatz Datentypen (Strukturen) Funktionen mit Typ-gebundenen Parametern neue Typen verlangen neue Funktionen Objekt-orientierter Ansatz Klassen mit Feldern und Methoden Objekte „wissen“, was mit ihnen geschieht http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Begriffe Klasse Objekt, Instanz Konstruktor, (Destruktor) einfache/(mehrfache) Vererbung Oberklasse, Unterklasse, Klassenhierarchie Klassen-/Instanz-Variablen und Methoden abstrakte Klassen, Interfaces Polymorphie Überladen von Methoden

Prozedurales Beispiel typedef struct GrafObj { int GrafType; int xl,yt, xr,yb; } GrafObj; *GrafObj[ ] GrafList; void moveObj (*GrafObj Item, int dx, int dy) {...}; void drawObj (*GrafObj Item) { switch (*GrafObj.GrafType) { case hollowRectangle: ...; case filledRectangle: ...; case hollowOval: ...; case filledOval: ...; ... }; }; for (int i=0,...,...) { drawObj(GrafList[i]); }; Aufgabe: Programm um Dreiecke erweitern

Objekt-orientiertes Beispiel class GrafObj { int xl,yt, xr,yb; void move (int dx, int dy) {...}; void draw (); }; class filledRectangle extends GrafObj { void draw () {...}; }; class hollowRectangle extends filledRectangle { void draw () {...}; }; ... GrafObj[ ] GrafList; for (int i=0,...,...) { GrafList[i].draw(); };

Vererbung im Detail class GrafObj { int xl,yt, xr,yb; void move (int dx, int dy) {...}; void draw (); }; class filledRectangle extends GrafObj { int xl,yt, xr,yb; void move (int dx, int dy) {...}; void draw () {...}; };

Java-Syntax allgemein Quelltext in UniCode, erlaubt sind also auch Umlaute, Diakritzeichen Zeichen aus anderen Zeichensätzen (z.B. Kanji) freie Formatierung keine Leerzeichen und Tabulatoren in Schlüsselworten Operatoren Bezeichnern Groß-/Kleinschreibung signifikant

Java-Syntax allgemein (Forts.) Kommentare // Kommentar bis zum Zeilenende /* ... */ evtl. mehrzeiliger Kommentar nicht schachtelbar Trennung von Anweisungen mittels ‘;’ (Ausnahme: for (...;...;...) {...}) syntaktische Zusammenfassung von Anweisungen mittels {...}

Bezeichner max. 255 Zeichen fast alle (Unicode-) Zeichen möglich außer Leerzeichen, Steuerzeichen Operatorenzeichen (z.B. ‘+’, ‘-’, ‘/’, ...) Klammern (‘(‘, ‘)’, ‘[‘, ‘]’, ‘{‘, ‘}’) Interpunktionszeichen (‘.’, ‘,’, ‘;’, ...) von Java genutzte Sonderzeichen (‘$’, “””, “’”)

Klassenbibliotheken “Sammlung” von Klassen und Schnittstellen Namensraum für enthaltene Klassen pkgname.classname schachtelbare Bibliotheksnamen Default-Klassenbibliothek  keine globalen Namen (Variablen, Klassen) Konvention für weltweit eindeutige Namen de.uni_stuttgart.rus.pkgname

Klassenbibliotheken (Fortsetzung) Implizite Erstellung package de.uni_stuttgart.rus.pkgname; Compiler-Aufruf javac -d basedir classname.java Verzeichnis mit Klassendateien basedir/de/uni_stuttgart/rus/pkgname/ mögliche Erscheinungsformen Verzeichnis mit vielen Klassendateien zip-Archiv (unkomprimiert!) Java-Archiv (jar-Datei, komprimiert)

Klassenbibliotheken (Fortsetzung) direkter Zugriff auf Bibliotheks-Klassen de.uni_stuttgart.rus.pkgname.classname Importieren von/aus Klassen-Bibliotheken import de.uni_stuttgart.rus.pkgname.*; import de.uni_stuttgart.rus.pkgname.classname; Classpath wird nach Klassenbibliothek durchsucht z.B. “.:/usr/local/java/lib/classes.zip:basedir” evtl. java -classpath “$CLASSPATH:basedir” ... sonst in JRE/lib/ext/ ablegen (nur Java 2)

Interne Klassenbibliotheken (Auszug) java.applet Web-Applets und “Zubehör” java.awt ... Grafische Benutzeroberflächen java.awt.event Ereignis-Behandlung java.awt.image Bearbeiten von Rastergrafiken java.beans JavaBeans java.io Datei-Systeme und -Ein/Ausgabe java.lang zu Java gehörende Klassen java.math beliebig genaue Arithmetik java.net Netzwerkunterstützung java.rmi ... Remote Method Invocation java.text landesspezifische Textbehandlung java.util ... Datenstrukturen etc. (zip-Archive)

Primitive Datentypen boolean (true, false, 1 bit) char (Unicode Zeichen, 16 bits) byte (-128...127, 8 bits) short (-32768...32767, 16 bits) int (-2147483648...+2147483647, 32 bits) long ( +/-9223372036854775807, 64 bits) float (32 bit IEEE 754 Fließkommazahl) double (64 bit IEEE 754 Fließkommazahl)

Referenz-Datentypen (Klassen) String Zeichenketten type[ ] Felder classname Objekte Arbeiten mit Referenzen Sonderfall: null Kopieren von Objekten a = b.clone(); Vergleich von Objekten a.equals(b); keine Pointer, Garbage Collection

Zeichenketten (Strings) Methoden in java.lang.String keine null-terminierten Zeichenfelder immer aus UniCode-Zeichen bestehend String selbst ist unveränderlich (Alternative: java.lang.StringBuffer) Deklaration String Test = “dies ist ein Test”; (kein Konstruktoraufruf erforderlich)

Zeichenketten (Fortsetzung) inhaltlicher Vergleich “ok”.equals(Result) Aneinanderhängen von Strings String Result = “found “ + (i+1) + “ items”; automatische Konvertierung Variablen anderer Datentypen (auch Objekte) in Zeichenketten ggfs. impliziter Aufruf von object.toString() ggfs. numerische Terme (o.ä.) klammern

Zeichenketten (Fortsetzung) Escape-Sequenzen \b Rückschritt \t Tabulator \n Zeilenvorschub \f Seitenvorschub \r Wagenrücklauf \‘, \“ einfaches/doppeltes Hochkomma \\ Backslash \xxx Zeichen mit angegebenem Oktalcode \uxxxx Zeichen mit angegebenem Hexcode

Eindimensionale Felder Definition String[ ] ParamList; int Vector [ ]; Anlegen von Feldern ParamList = new String[10]; Vector = {4, 1, 0}; new String[ ] {“zur”,“direkten”,“Verwendung”} Anlegen der Feldelemente ParamList[0] = “Test”; System.arraycopy(src,srcpos, dst,dstpos, len)

Mehrdimensionale Felder Felder von Feldern von Feldern... Definition int [ ][ ] Matrix; Anlegen mehrdimensionaler Felder Matrix = new int[2][2]; Matrix = new int[2][ ]; Matrix = {{1,0}, {0,1}}; Anlegen der Feldelemente Matrix[0,1] = 0; Matrix[0] = new int[ ] {1,0};

Felder (allgemein) leiten sich von Klasse “Object” ab automatische Feldgrenzenüberwachung Ermitteln der Feldlänge int RowCount = Matrix.length; int ColCount = Matrix[0].length; Beispiel für unmittelbare Verwendung method(1, new short[ ] {1, 2});

Variablen und Konstanten Deklaration int a; String Text1 = “Test”, Text2; java.awt.Dimension Size; Anlegen von Objekten Size = new Dimension(40,10); Initialisierung vor Verwendung erforderlich Zugriff auf Klassen-/Objekt-Daten java.awt.SystemColor.desktop Size.width = 24;

Operatoren-Hierarchie ++, --, +, -, ~, !, (type) *, /, % +, - <<, >>, >>> <, <=, >, >=, instanceof ==, != & ^ | && || ?: =, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=

Operatoren (Besonderheiten) + (für Zeichenketten) String Result = “found “ + (i+1) + “ items”; >> mit “sign extension” >>> fügt links eine 0 ein variable instanceof class/interface prüft Zuweisbarkeit von Variablen && und || mit “short-circuit evaluation” cond ? trueValue : falseValue

Anweisungen if/else-Anweisung if (...) ...; if (...) ...; else ...; if (...) ...; elseif (...) ...; else ...; switch/case-Anweisung switch (...) { case ...: ...; case ...: ...; break; default: ...; };

Anweisungen (Fortsetzung) while-Schleife while (...) ...; do-Schleife do ...; while (...); for-Schleife for (init; cond; inc) ...; mehrere Anweisungen in init, cond, inc mittels Komma trennen lokale Schleifenvariablen ggfs. in init deklarieren

Anweisungen (Fortsetzung) try/catch/finally-Anweisung try { ...; } catch (Throwable Signal) { ...; } finally { ...; };

Java Syntax (Fortsetzung) Verlassen von Anweisungen: break nächster Schleifendurchlauf: continue Anweisungsmarken test: while (...) { try { if (...) continue test; if (...) break test; } finally {...}; };

Aufbau einer Klassendatei package ...; import ...; public class classname extends ... implements ... { (Daten, Klassen-Initialisierungen, Konstruktoren, Methoden, innere Klassen) }; (evtl. weitere Klassen/Schnittstellen - nicht public)

Aufbau einer Schnittstellendatei package ...; import ...; public interface classname extends ... { (Konstanten, Methoden-Deklarationen) };

Klassen-Initialisierungen Definitionsmuster static {...}; Zweck z.B.: Laden von Bibliotheken (für “native Code”) Vorbelegen von Wertetabellen mehrere Initialisierungen pro Klasse möglich (werden aneinandergehängt) Abarbeitung unmittelbar nach Laden der Klasse

Konstruktoren Definitionsmuster, z.B. public classname (...) {...}; Aufruf: ... = new classname (...); ggfs. wird Default-Konstruktor erzeugt public classname() {super();}; Abhilfe durch: private classname() {...}; erste Anweisung im Konstruktor muß sein super (...); this (...); wird ggfs. automatisch eingefügt

Methoden Definitionsmuster void paint (Graphics Graf) throws ... {...}; Dimension getPreferredSize () {...}; keine variable Anzahl von Argumenten Argumente stets typ-gebunden “Abhilfe”: Object als Argument-Typ Polymorphie Argumentübergabe “by value”, “by ref.” nur Inhalte von Objekten als Argumente können modifiziert werden

Innere Klassen class outer extends ... implements ... { ... class inner extends ... implements ... { ... }; ... };

Innere Klassen (Forts.) unabhängig von Klassenhierarchie inner ist ggfs. nur für outer sichtbar inner “sieht” alle Attribute/Methoden in outer Klassenname nach außen: outer.inner Klassendatei outer$inner.class Konstruktoraufruf in outer: new inner (...) sonst: outer.new inner (...)

Sichtbarkeit von Klassen/Schnittstellen public sichtbar in allen Bibliotheken (ohne Angaben) nur in derselben Bibliothek sichtbar

Sichtbarkeit von Daten und Methoden sofern Klasse/Schnittstelle sichtbar: public sichtbar in allen Klassen und Bibliotheken protected sichtbar in derselben Klasse und allen Unterklassen (auch in anderen Bibliotheken) (ohne Angaben) sichtbar in allen Klassen derselben Bibliothek private nur in derselben Klasse sichtbar

Weitere Objekteigenschaften abstract final native static synchronized transient volatile

Java versus C/C++ kein Präprozessor keine “Prototypen” echte Konstanten echtes “Inlining” von Methoden Entfernung von unbenutztem Code kein #include keine “Prototypen” keine globalen Variablen/Klassen keine Mehrfach-Vererbung keine “templates”

Java versus C/C++ (Fortsetzung) Compiler kontrolliert Variablen-Initialisierung echte Zeichenketten (stets UniCode) echte logische Variablen “int” belegt stets 32 bit Gleitkomma-Arithmetik gemäß IEEE 754 Arbeiten mit “Referenzen”, Parameterübergabe von “Werten”/”Ref.” Zuweisungen/Vergleiche von Referenzen echte “null”

Java versus C/C++ (Fortsetzung) keine Adressen/Pointer automatische Speicherverwaltung (kein “malloc”, kein “free”) kein “sizeof” automatische Feldgrenzenüberwachung kein Destruktor

Java versus C/C++ (Fortsetzung) kein “goto” komfortable Ausnahmebehandlung Exceptions sind eigene Klassen try/catch/finally Compiler kontrolliert Ausnahmebehandlung Methode “main” ohne Rückgabewert keine Umgebungsvariablen Synchronisation von Threads ist Bestandteil der Sprache

Programmieren in Java Grundlegende Vorgehensweise Erstellen des Quelltextes (meist eine Klasse pro Datei) Hauptprg.: public static void main (String argv[]) Dateiname: classname.java Übersetzen des Quelltextes javac optionen classname.java erzeugt die Datei classname.class Starten eigenständiger Programme java optionen classname argumente Wichtige Compileroptionen: - -d basedir Wichtige Laufzeitoptionen - -classpath

Programmieren in Java (Forts.) Verwenden von WWW-Applets HTML-Datei erstellen (z.B. Test.html) <applet code=“classname.class” ... width=... height=...> ... (Übergabeparameter, Ersatzbild, o.ä.) </applet> HTML-Datei in WWW-Browser betrachten (Java muß aktiviert sein!) Appletviewer starten appletviewer Test.html

Programmbeispiel public class HelloWorld { public static void main (String args[ ]) { System.out.println("Hello, World!"); }; }; javac HelloWorld.java java HelloWorld

Ein-/Ausgabe von/auf „Konsole“ Ausgabe auf stdout: System.out.print (text); System.out.println(text); Ausgabe auf stderr: System.err.print (text); System.err.println(text); Eingabe von stdin: ... = System.in.read(); System .in.read(bytearray); System .in.read(bytearray, offset, length);

Interaktion mit der Laufzeitumgebung Kommandozeilen-Argumente public static void main (String args[ ]) Rückgabewert System.exit(...); Umgebungsvariablen beim Aufruf: java -Dname=value Test im Programm: System.getProperty("name"); Starten externer Programme Runtime.getRuntime.exec("kommando");

Interaktion mit der Laufzeitumgebung import java.io.*; public class Java_00 { public static void main(String args[ ]) { if (args.length == 0) { System.out.println(" no argument given"); } else { System.out.println(" got " + args.length + " arguments:"); for (int i = 0; i < args.length; i++) { System.out.println(" " + i + ") \"" + args[i] + "\""); };

Interaktion mit der Laufzeitumgebung import java.io.*; public class Java_01 { public static void main(String args[ ]) { java.util.Properties SysProps = System.getProperties(); java.util.Enumeration SysKeys = SysProps.keys(); while (SysKeys.hasMoreElements()) { String KeyName = (String) SysKeys.nextElement(); System.out.println(" " + KeyName + " = \"" + SysProps.get(KeyName) + "\""); };

Interaktion mit der Laufzeitumgebung String StrValue; int IntValue; StrValue = System.getProperty("name"); if (StrValue == null) StrValue = ""; if (StrValue.equals("nix")) StrValue = ""; try { IntValue = Integer.parseInt(System.getProperty("name", "1")); } catch (NumberFormatException Signal) { IntValue = 1; };

Interaktion mit der Laufzeitumgebung Process Command; Command = Runtime.getRuntime().exec("/bin/sh test.sh"); if (Command == null) { Toolkit.getDefaultToolkit().beep(); System.out.println("unable to start external command"); }; Kommandoausgabe kann abgefangen und bearbeitet werden (siehe Ein-/Ausgabe mit Dateien)

Zugriff auf das Dateisystem import java.io.File; Anlegen/Löschen/Umbenennen von Dateien und Verzeichnissen Ausgabe von Verzeichnisinhalten Prüfen von Verzeichniseinträgen auf vorhanden/lesbar/beschreibbar Datei/Verzeichnis Zeitpunkt der letzten Modifikation (nur zu Vergleichszwecken)

Zugriff auf das Dateisystem import java.io.*; public class Java_02 { public static void main(String Args[ ]) { File CurDir = new File("."); System.out.println(" scanning " + CurDir.getAbsolutePath() + ":"); String[] DirList = CurDir.list(); for (int i = 0; i < DirList.length; i++) { String EntryName = DirList[i]; File EntryFile = new File(EntryName); System.out.print(" "); System.out.print(EntryFile.canRead() ? "r" : "-"); System.out.print(EntryFile.canWrite() ? "w" : "-");

Zugriff auf das Dateisystem System.out.print(" "); if (EntryFile.isDirectory()) { System.out.println(EntryName + File.separator); } else { System.out.println(EntryName + " (" + EntryFile.length() + " bytes)"); };

Ein-/Ausgabe mit Dateien import java.io.*; Datenströme für (plattformabhängigen) Text Reader/Writer Binärdaten, Unicode-Text Input/OutputStream Klassen lassen sich verketten operieren auf Dateien, Zeichenketten, Arrays, Pipes, Sockets Programm FileReader Datei LineNumberReader

Ein-/Ausgabe mit Dateien (Forts.) import java.io.*; try { Reader = new BufferedReader (new FileReader("Eingabe.txt")); Writer = new BufferedWriter (new FileWriter("Ausgabe.txt")); for (int InChar = Reader.read(); InChar != -1; InChar = Reader.read()) { Writer.write(InChar); }; Reader.close(); Writer.close();

Ein-/Ausgabe mit Dateien (Forts.) } catch (IOException Signal) { Toolkit.getDefaultToolkit().beep(); System.err.println("error " + Signal.getMessage()); if (Reader != null) try {Reader.close();} catch (IOException InnerSignal) {/* nop */}; if (Writer != null) try {Writer.close();} catch (IOException InnerSignal) {/* nop */}; };

Java Programmierbeispiele Java Demonstrationsprogramme (im Sun JDK enthalten) Java Tutorial http://java.sun.com/docs/books/tutorial Programme des Autors http://www-ks.rus.uni-stuttgart.de/ people/Rozek/World/Java/Kurs/Examples

Viel Spaß beim Ausprobieren!

Java und das World-Wide Web Einführung in Java Teil III Java und das World-Wide Web http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Java und das World-Wide Web Grafische Benutzeroberflächen Applets Netzwerk-Unterstützung

Grafische Benutzeroberflächen DisplayManager WindowManager Applikation Dekoration Zeichenbereich der Applikation

Grafische Benutzeroberflächen hinteres Fenster ist teilweise verdeckt

Grafische Benutzeroberflächen vorderes Fenster wird verschoben verdeckter Bereich muß neu gezeichnet werden

Ereignisorientierte Programmierung Ereignis (Event) Mausbewegungen Mausklicks Tastatureingaben (weitere) Ereignisbehandlung Event Handling Ereigniswarteschlange (Event Queue)

Oberflächen-Komponenten ToolBar MenuBar Button Canvas Grafiken Label Choice

Aufbau grafischer Oberflächen hierarchische Anordnung von Komponenten Anordnung der Komponenten mithilfe eines "Layout-Manager" Komponenten haben "Funktionalität", reagieren auf Events "Programmieren" von Oberflächen bedeutet Erstellen von Event-Behandlungsroutinen

Verfügbare Komponenten (AWT) Component Button Canvas Checkbox Choice Label List Scrollbar TextComponent (TextArea, TextField)

Verfügbare Komponenten (Forts.) Container Panel ScrollPane Window - Dialog, FileDialog - Frame

Verfügbare Komponenten (Forts.) MenuComponent - MenuBar - MenuItem - Menu, PopupMenu - CheckboxMenuItem

Verfügbare Layout-Manager BorderLayout CardLayout FlowLayout GridLayout GridBagLayout

Ein erstes AWT-Beispiel import java.awt.*; public class AWT_00 extends Frame { public AWT_00 () { super("Fenstertitel"); // Frame erzeugen, Titelzeile definieren // Layout-Manager definieren, Komponenten erzeugen und eintragen pack(); // Komponenten arrangieren setVisible(true); // Fenster anzeigen }; public static void main (String Args[]) { AWT_00 Instance = new AWT_00(); // Frame erzeugen, AWT starten }; };

Ein zweites AWT-Beispiel import java.awt.*; import java.awt.event.*; public class AWT_00 extends Frame { public AWT_00 () { super("Fenstertitel"); enableEvents(AWTEvent.WINDOW_EVENT_MASK); pack(); setVisible(true); }; protected void processWindowEvent (WindowEvent Event) { super.processWindowEvent(Event); // ermöglicht Standard-Bearbeitung if (Event.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); // Programm beenden }; }; ...

Farben java.awt.Color - new Color (int r, int g, int b) - new Color (int rgb) - Color.black, Color.blue, ... - Color.getHSBColor(hue, sat, brightness) java.awt.SystemColor

Farben (Beispiele)

Zeichensätze (Fonts) java.awt.Font new Font(name, style, size) name: "Serif", "SansSerif", "Monospaced", "Dialog", "DialogInput" style: Font.PLAIN, Font.BOLD, Font.ITALIC size: (in Pixel) java.awt.FontMetrics

Zeichensätze (Beispiele)

Ein drittes AWT-Beispiel public AWT_00 () { super("Fenstertitel"); enableEvents(AWTEvent.WINDOW_EVENT_MASK); setFont(new Font("Helvetica", Font.BOLD, 12)); // auch für innere Komp. setBackground(Color.lightGray); // dto. // Layout-Manager definieren, Komponenten erzeugen und eintragen pack(); // Komponenten arrangieren show(); // Fenster anzeigen }; ...

Ein drittes AWT-Beispiel (Forts.) public AWT_00 () { ... setLayout(new BorderLayout()); Label TitleLabel = new Label("ein einfaches Beispiel"); add("North", TitleLabel); Canvas DrawingArea = new Canvas(); DrawingArea.setSize(160,120); DrawingArea.setBackground(Color.gray); add("Center", DrawingArea); Button OkButton = new Button(" Ok "); add("South", OkButton); pack(); // Komponenten arrangieren setVisible(true); // Fenster anzeigen };

Zeichnen in einem Canvas paint(Graphics Graf) einzelne/zusammenhängende Linien leere/gefüllte Rechtecke, abgerundete Rechtecke, Ellipsen, Ellipsenbögen und Polygone Text Rastergrafiken (Bitmaps, GIF und JPEG) invertiertes Zeichnen

Ein viertes AWT-Beispiel public AWT_00 () { ... Area DrawingArea = new Area(); ... }; class Area extends Canvas { public void paint (Graphics Graf) { Graf.setColor(Color.white); Graf.drawLine(0,0, getSize().width-1,getSize().height-1); Graf.drawLine(0,getSize().height-1, getSize().width-1,0); }; };

Ereignisse und deren Bearbeitung Listener AWTEvent processEvent java.awt.AWTEvent - getID() - getSource() Component.processEvent(AWTEvent Event) import java.awt.event.*; - KeyEvent, MouseEvent, ActionEvent, ... - KeyListener, MouseListener, ...

Empfangen von Events Implementieren eines passenden Listener public class ActionHandler implements ActionListener { public actionPerformed (ActionEvent Event) { ... }; }; evtl. Verwendung des passenden Adapters public class ActionHandler extends MouseAdapter { ... }; "Registrierung" des Listener OkButton.addActionListener(ActionHandler)

Ein fünftes AWT-Beispiel public class AWT_00 implements ActionListener { public AWT_00 () { ... OkButton.addActionListener(this); ... }; public actionPerformed (ActionEvent Event) { System.exit(0); }; };

java.awt.Label new Label(Text) new Label(Text, Alignment) setAlignment(Alignment) setText(Text) (von Component geerbt) setForeground(Color) setBackground(Color) setFont(Font)

java.awt.Button new Button() new Button(Label) setLabel(Label) setActionCommand(Command) addActionListener(Listener)

java.awt.Canvas, java.awt.Graphics new Canvas() paint(GrafContext)

java.awt.Checkbox new Checkbox(Label) new Checkbox(Label, State) new Checkbox(Label, State, Group) new CheckboxGroup() setLabel(Label) setState(State) setCheckboxGroup(Group)

java.awt.Choice new Choice() add(Label) remove(Position), remove(Label) removeAll() select(Position), select(Label) getItemCount() getSelectedIndex() addItemListener(Listener)

java.awt.List new List() new List(Rows) new List(Rows, MultiMode) add(Label), add(Label, Index) remove(Label), remove(Index), removeAll() replaceItem(newLabel, Position) select(Index) addActionListener(Listener) addItemListener(Listener)

java.awt.TextField new TextField(Text) new TextField(Columns) new TextField(Text, Columns) setText(Text) setEditable(OnOff) setSelectionStart(Index) setSelectionEnd(Index) setColumns(Columns) setEchoChar(Character)

java.awt.TextField (Fortsetzung) addActionListener(Listener) addTextListener(TextListener)

java.awt.TextArea new TextArea(Text) new TextArea(Rows, Cols) new TextArea(Text, Rows, Cols) new TextArea(Text, Rows, Cols, ScrollBars) setRows(Rows), setColumns(Cols) append(Text) insert(Text, Position) replaceRange(Text, StartPos, EndPos)

java.awt.TextArea (Fortsetzung) setEditable(OnOff) setSelectionStart(Index) setSelectionEnd(Index) setColumns(Columns) setEchoChar(Character) addTextListener(TextListener)

java.awt.Scrollbar new Scrollbar(Orientation) new Scrollbar(Orientation, Value, Visible, Minimum, Maximum) setBlockIncrement(Value), ...Line/Page/Unit... setMinimum(Value), ...Maximum setValue(Value) setValues(Value, Visible, Min, Max) addAdjustmentListener(Listener)

java.awt.Image Toolkit.getDefaultToolkit().getImage(FileName) Toolkit.getDefaultToolkit().getImage(URL) Toolkit.getDefaultToolkit().createImage(...) ImageProducer ImageObserver ImageConsumer

Applets (Rekapitulation) (kleine) Java-Applikationen, die innerhalb eines WWW-Browsers ablaufen indirekter Aufruf via HTML-Seite strenge Sicherheitsbeschränkungen - kaum/kein Zugriff auf die Laufzeitumgebung - Netzverbindungen nur zum HTTP-Server - Dialoge und Fenster werden gekennzeichnet

Applets Verwenden von WWW-Applets HTML-Datei erstellen (z.B. classname.html) <applet code=“classname.class” ... width=... height=...> ... (Übergabeparameter, Ersatzbild, o.ä.) </applet> HTML-Datei in WWW-Browser betrachten (Java muß aktiviert sein!) Appletviewer starten appletviewer classname.html

Aufbau eines Applets Applets werden vom Browser instanziert kein Textmodus, nur Grafik keine main()-Methode wichtige Methoden: public void init() public void start() public void stop() public void destroy() public void paint(Graphics Graf) init start stop destroy

Erscheinungsbild

Hilfsinformationen für Benutzer public String getAppletInfo() { return "Informationen über das Applet\n" + "und seinen Autor"; }; public String[ ][ ] getParameterInfo() { return ParameterInfo; }; final Static String[ ][ ] ParameterInfo = { {"Name", "Typ", "Beschreibung"}, {..., ..., ...} };

Parameter-Übergabe in der HTML-Datei: <applet ...> <param name="param_name" value="param_value"> ... </applet> im Applet: String Value = getParameter("param_name"); - Groß-/Kleinschreibung ist signifikant - nicht vorhandene Parameter liefern null

Kommunikation zwischen Applets in der HTML-Datei: <applet ... name="applet_name"> im Applet: String Name = getParameter("Name"); AppletContext Context = getAppletContext(); Applet AppletInstance = Context.getApplet(Name);

Kommunikation zwischen Applets im Applet: Enumeration AppletSet = Context.getApplets(); while (AppletSet.hasMoreElements()) { Applet Neighbour = (Applet) AppletSet.nextElement(); String Name = Neighbour.getParameter("Name"); }; Kommunikation durch Methodenaufrufe Neighbour.stop();

Steuerung des Browsers Aufruf weiter HTML-Dokumente: showDocument(URL) showDocument(URL, target) mögliche Darstellungsweisen: - im aktuellen "frame" - im "parent frame" - im obersten "frame" - in einem neuen Fenster mit/ohne Namen

Rastergrafiken und Musikstücke Rastergrafiken: Image Bitmap = getImage(URL) Image Bitmap = getImage(URL, Name) Musikstücke: play(URL); java.applet.AudioClip Music = getAudioClip(URL); Music.loop(); Music.stop();

Netzwerkunterstützung import java.net.*; numerische/symbolische IP-Adressen URLs Sockets (TCP/IP und UDP/IP, IP Multicast) URLConnection (HTTP und FTP)

IP-Adressen (java.net.InetAddress) try { InetAddress Address = InetAddress.getByName(hostname); } catch (UnknownHostException Signal) { ... }; InetAddress.getLocalHost(); InetAddress[ ] AdressList = InetAddress.getAllByName(name); byte[ ] numericAddress = Adress.getAddress(); String IPAddress = Address.getHostAddress();

Sockets I (UDP) Socket anlegen Socket definieren Pakete senden new DatagramSocket() new DatagramSocket(localPort) new DatagramSocket(localPort, localAddr) getLocalPort() getLocalAddress() setSoTimeout(milliSecs) send(Packet) receive(Packet) close() Socket anlegen Socket definieren Pakete senden Pakete empfangen Socket schließen

Sockets I (UDP Pakete) new DatagramPacket(Buffer,Length) new DatagramPacket(Buffer,Length, Address,Port) setAddress(Address) setPort(Port) setData(Buffer) setLength(Length)

Sockets I (UDP Beispiel) try { DatagramSocket UDPSocket = new DatagramSocket(...); DatagramPacket UDPPacket = new DatagramPacket() UDPPacket.setData(...); UDPPacket.setLength(...); UDPSocket.send(UDPPacket); UDPSocket.receive(UDPPacket); UDPSocket.close(); } catch (SocketException Signal) { } catch (IOException Signal) { };

Sockets II (TCP) Server legt "ServerSocket" an Client legt "Socket" an Server wartet auf eingehende Vbdg.wünsche Client kontaktiert Server Server nimmt Vbdg.wunsch entgegen Server legt "Socket" für Datenverkehr an Client und Server kommunizieren via "Socket" Client und Server schließen "Socket"

Sockets II (ServerSocket) new ServerSocket(Port) new ServerSocket(Port, BackLog) new ServerSocket(Port, BackLog, localAddr) getLocalPort() getInetAddress() setSoTimeout(milliSecs) accept() -> Socket close()

Sockets II (Socket) new Socket(remoteHostName, remotePort) new Socket(remoteHostAddr, remotePort) new Socket(remoteHostName, remotePort, localAddr, localPort) new Socket(remoteHostAddr, remotePort , localAddr, localPort) getLocalAddress(), getLocalPort() getInetAddress(), getPort() setSoLinger(OnOff, milliSecs) setTcpNoDelay(OnOff) setSoTimeout(milliSecs) getInputStream() getOutputStream() close()

Sockets II (Beispiel Server) try { ServerSocket ContactSocket = new ServerSocket(...); Socket IOSocket = ContactSocket.accept(); ... // IO siehe nächste Folie IOSocket.close(); ContactSocket.close(); } catch (IOException Signal) { };

Sockets II (Beispiel Client) try { Socket IOSocket = new Socket(...); DataInputStream InStream = IOSocket.getInputStream(); DataOutputStream OutStream = IOSocket.getOutputStream(); OutStream.writeInt(...); InStream.readInt(); OutStream.close(); InStream.close(); IOSocket.close(); } catch (IOException Signal) { };

URLs new URL(Protocol, Host, Port, File) new URL(Protocol, Host, File) new URL(URLString) new URL(Context, URLString) getProtocol(), getHost(), getPort(), getFile(), usw. sameFile(URL) openConnection() -> URLConnection openStream() -> InputStream unterstützte Protokolle: HTTP, FTP, File

URLConnection URL.openConnection() getContentEncoding(), getExpiration(), getLastModified(), usw. getInputStream(), getOutputStream() getContent() try { URL NetURL = new URL("http://www-ks.../people/...); InputStream URLStream = NetURL.openStream(); ... URLStream.close(); NetURL.close(); } catch (IOException Signal) { };

Viel Spaß beim Ausprobieren!

Die „Java Foundation Classes“ Einführung in Java Teil IV Die „Java Foundation Classes“ http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Die „Java Foundation Classes“ JFC/Swing - „Model-View-Controller“-Ansatz (MVC) - einstellbares „Look-and-Feel“ - die Komponenten und deren Verwendung Verwendung der Zwischenablage Implementierung von „Drag-and-Drop“ Druckerunterstützung Erstellung und Verwendung von JavaBeans

JFC/Swing

JFC/Swing Bestandteil der Java Foundation Classes (JFC) - Java “Accessibility” - Java 2D (nur Java 1.2) - Drag-and-Drop (nur Java 1.2) Klassenbibliothek mit neuen GUI-Komponenten (einigermaßen) aufwärts-kompatibel zu AWT (AWT- und Swing-Komponenten NICHT MISCHEN!) nutzt “Model-View-Controller”-Ansatz (genauer: “Model-Delegate”) plattform-unabhängiges Look-and-Feel, umschaltbar

JFC/Swing (Fortsetzung) für Java 1.1.x - SwingSet (1.1beta3 als Bestandteil des JFC 1.1) herunterladen und installieren (swingall.jar) - Klassenbibliotheken (evtl.) com.sun.java.swing... für Java 1.2 - SwingSet (1.1) ist in Java 1.2 enthalten - Klassenbibliotheken javax.swing... Beispiele (im Quelltext) werden mitgeliefert Tutorial unter http://java.sun.com/docs/books/tutorial/uiswing/

Besondere Eigenschaften (Auszug) gleiches Aussehen auf allen Plattformen beliebig geformte Komponenten Schaltflächen o.ä. mit Rastergrafiken frei wählbare Rahmen um Komponenten „Double Buffering“ (abschaltbar) „Tool Tips“ Bedienung mittels Tastatur Unterstützung von Sprachanpassungen (Lokalisierungen)

Model-View-Controller Trennung von Daten, Ansicht und Funktion ermöglicht z.B. mehrere Ansichten desselben Datensatzes wird meist als “Model-Delegate” realisiert Model View Controller Rohdaten Ansicht Funktionalität

Look-and-Feel regelt - Aussehen, - Bedienung und - Verhalten von Benutzeroberflächen in Swing implementiert - Windows - Motif - „Cross Plattform“ (Metal) - (Macintosh)

Swing Komponenten I JList JLabel JTextField JTextArea JButton JToolBar JSlider JScrollPane JToolTip JProgressBar JChoice JTree JTable JMenu... JTabbedPane JSplitPane

Swing Komponenten II .showMessageDialog JFrame JDialog .showWarningDialog JInternalFrame .showInputDialog .showConfirmDialog JColorChooser JFileChooser

Swing Komponenten III

Einsatz von Swing-Komponenten import java.awt.*; import java.awt.event.*; import com.sun.java.swing.*; public class Hello extends JFrame implements ActionListener { public Hello () { super("Hello, Swing!"); enableEvents(AWTEvent.WINDOW_EVENT_MASK); Container ContentPane = getContentPane(); ContentPane.setLayout(new BorderLayout()); ((JPanel) ContentPane).setDoubleBuffered(false); JLabel TitleLabel = new JLabel("ein Swing-Beispiel:"); ContentPane.add("North", TitleLabel);

Einsatz von Swing-Komponenten Canvas DrawingArea = new Canvas(); DrawingArea.setSize(160,120); DrawingArea.setBackground(Color.gray); ContentPane.add("Center", DrawingArea); JButton OkButton = new JButton("Ok"); OkButton.addActionListener(this); ContentPane.add("South", OkButton); setContentPane(Pane); }; public actionPerformed (ActionEvent Event) { System.exit(0); }; ...

Einsatz von Swing-Komponenten protected void processWindowEvent (WindowEvent Event) { super.processWindowEvent(Event); // ermöglicht Standard-Bearbeitung if (Event.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); // Programm beenden }; }; };

Einstellen des “Look-and-Feel” public class Hello extends JFrame implements ActionListener { public Hello () { super("Hello, Swing!"); enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { UIManager.setLookAndFeel ( UIManager.getCrossPlatformLookAndFeelClassName() ); } catch (Exception Signal) { /* nop */ }; JPanel Pane = new JPanel(); ... }; ... };

Vewendung der Zwischenablage import java.awt.datatransfer.*; lokale und system-weite Zwischenablagen Clipboard Transferable ClipboardOwner

Clipboard, ClipboardOwner Clipboard(Name) Toolkit.getDefaultToolkit().getSystemClipboard() setContents(Transferable, Owner) getContents(Requestor); ClipboardOwner lostOwnership(Clipboard, Transferable)

DataFlavour DataFlavour(MimeType) DataFlavour(MimeType, Name) DataFlavour(RepresentationClass, Name); DataFlavour.plainTextFlavour DataFlavour.stringFlavour DataFlavour.javaFileListFlavour getHumanPresentableName(), getMimeType(), ... getRepresentationClass()

Transferable, StringSelection getTransferDataFlavours() isDataFlavourSupported(Flavour) getTransferData(Flavour) StringSelection(Text) implementiert Transferable und ClipboardOwner

Zwischenablage (Beispiel) public class CopyPasteTest implements ClipboardOwner { public void copy (String Text) { Clipboard SysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); StringSelection Contents = new StringSelection(Text); SysClip.setContents(Contents, this); }; public void lostOwnership (Clipboard Clip, Transferable Data) {/*nop*/}; ...

Zwischenablage (Fortsetzung) public String paste () { Clipboard SysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable Data = SysClip.getContents(this); if ((Data != null) && Data.isDataFlavourSupported(DataFlavour.stringFlavour)) { try { return (String) Data.getTransferData(DataFlavour.stringFlavour); } catch (Exception Signal) { ... }; } else return „“; }; };

Drag-and-Drop import java.awt.dnd.*; DragGestureRecognizer, DragGestureListener DragSource, DragSourceListener DropTarget, DropTargetListener DNDConstants - ACTION_COPY, ACTION_COPY_OR_MOVE - ACTION_MOVE, ACTION_NONE - ACTION_LINK, ACTION_REFERENCE

DragGestureListener dragGestureRecognized (DragGestureEvent)

DragSource DragSource() createDefaultDragGestureRecognizer (Component, Actions, DragGestureListener) startDrag (DragGestureEvent, Cursor, Transferable, DragSourceListener) startDrag (DragGestureEvent, Cursor, Image, Point, Transferable, DragSourceListener)

DragSourceListener dragDropEnd(DragSourceDropEvent) dragEnter (DragSourceDropEvent) dragExit (DragSourceDropEvent) dragOver (DragSourceDropEvent) dropActionChanged(DragSourceDropEvent)

DropTarget DropTarget (Component, DropTargetListener) DropTarget (Component, Actions, DropTargetListener) dragEnter (DropTargetDragEvent) dragOver (DropTargetDragEvent) dragExit (DropTargetDragEvent) drop (DropTargetDragEvent) dropActionChanged (DropTargetDragEvent)

DropTargetDragEvent acceptDrag (DragOperation) rejectDrag () getCurrentDataFlavours() isDataFlavourSupported (DataFlavour)

DropTargetDropEvent acceptDrop (DropAction) rejectDrop () dropComplete (Success) getCurrentDataFlavours() isDataFlavourSupported (DataFlavour) getTransferable()

Drag-and-Drop (Beispiel) public class DnDTester extends Frame implements DragGestureListener, DragSourceListener, DropTargetListener { DragSource Source = new DragSource(); DropTarget Target = new DropTarget ( TargetCtrl, DnDConstants.ACTION_COPY_OR_MOVE, this ); DragGestureRecognizer Recognizer = Source.createDefaultDragGestureRecognizer ( DragCtrl, DnDConstants.ACTION_COPY_OR_MOVE, this ); ...

Drag-and-Drop (Fortsetzung) public void dragGestureRecognized (DragGestureEvent Event) { Event.startDrag (Source.DefaultCopyDrop, Transferable, this); }; public void dragDropEnd (DragSourceDropEvent Event) {/* nop */}; public void dragEnter (DragSourceDragEvent Event) {/* nop */}; public void dragExit (DragSourceDragEvent Event) {/* nop */}; public void dragOver (DragSourceDragEvent Event) {/* nop */}; public void dropActionChanged (DragSourceDragEvent Event) { }; ...

Drag-and-Drop (Fortsetzung) public void dragEnter (DropTargetDragEvent Event) { Event.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); }; public void drop (DropTargetDropEvent Event) { try { if (Event.isDataFlavourSupported(DataFlavour)) { ... Event.getTransferable(); Event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); .... Event.dropComplete(true); } else { Event.rejectDrop(); }; };

Drucken mit Java Grundprinzip: Zeichnen im passenden Grafik-Kontext java.awt.PrintJob - Toolkit.getDefaultToolkit().getPrintJob(Frame,Title,Properties) - getGraphics() - getPageDimension() -> Ausmaße in Pixel - getPageResolution() -> Auflösung in dpi - end() java.awt.Graphics - dispose() für Seitenfortschaltungen

Drucken mit Java (Fortsetzung) PrintJob Job = Toolkit.getDefaultToolkit().getPrintJob(...); if (Job != null) { Graphics JobContext = Job.getGraphics(); for (int PageNum = 0; PageNum < 5; PageNum++) { JobContext.setColor(Color.black); JobContext.setFont(new Font("Helvetica", Font.BOLD, 14)); JobContext.drawString("Seite: " + PageNum, 20,20); JobContext.dispose(); }; Job.end(); };

Java Reflection Ermöglicht - Untersuchung von Bibliotheken & Klassen - expliziten Aufruf von Konstruktoren/Methoden - expliziten Zugriff auf Attribute Package Zugriff auf Klassenbibliothek Class Laden/Untersuchen von Klassen Constructor Zugriff auf Konstruktoren Field Zugriff auf Attribute Method Zugriff auf Methoden

JavaBeans Komponenten mit wohldefinierten Schnittstellen zur Verwendung in visuellen Entwicklungsumgebungen JavaBean darf “unsichtbar” sein

JavaBeans allgemein Schnittstelle einer JavaBean definiert - Konstruktoren - Attribute - Methoden - Ereignisse (Events) „Export“ geschieht durch - Einhalten von Namenskonventionen - Erstellen von Descriptorklassen (BeanInfo) „Import“ geschieht durch „Java Reflection“

JavaBeans allgemein (Fortsetzung) „Customizer“ erlauben Einstellungen von JavaBean-Parametern Speicherung des JavaBean-Zustands Bereitstellung einer JavaBean als - Java Archive (JAR-Datei) - mit passendem „manifest.mf“ siehe „JavaBeans“-Abschnitt im Java-Tutorial

JavaBeans allgemein (Fortsetzung) Beans Development Kit (Java BDK) http://java.sun.com/beans/software/bdk_download.html

Viel Spaß beim Ausprobieren!

Einführung in Java Java‘s Welt Teil V http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs

Begleitmaterial zum Kurs Folien im HTML-Format http://www-ks.rus.uni-stuttgart.de/people/Rozek/ World/Java/Kurs/ Folien als ZIP-Archiv http://www-ks.rus.uni-stuttgart.de/people/Rozek/ World/Java/Kurs.zip Beispielprogramme des Autors http://www-ks.rus.uni-stuttgart.de/people/Rozek/ World/Java/Kurs/Examples Beispielprogramme als ZIP-Archiv http://www-ks.rus.uni-stuttgart.de/people/Rozek/ World/Java/Kurs/Examples/Examples.zip

Java PlugIn WWW-Browser haben Probleme mit der Unterstützung von Java neue Versionen nur mit Verzögerung verfügbar unvollständige Unterstützung fehlerhafte Implementierung (jeder Browser mit anderen Fehlern) => Sun liefert Java VM als - ActiveX-Control (für Internet Explorer) bzw. - PlugIn (für Netscape Communicator) Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java PlugIn (Fortsetzung) Version 1.2.2 verfügbar unter http://java.sun.com/products/plugin/ (oder als Bestandteil des Sun JDK 1.2) Beschreibung der HTML-Direktiven unter http://java.sun.com/products/plugin/1.2/docs/tags.html HTML-Konverter verfügbar unter http://java.sun.com/products/plugin/1.2/converter.html Beschreibung der PlugIn-Eigenschaften unter http://192.9.48.9/products/plugin/1.2/docs/index.docs.html Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java PlugIn (Fortsetzung) Aufruf im Netscape Communicator: <EMBED type="application/x-java-applet;version=1.2“ width="200" height="200" code="classname.class" codebase="codebase_URL" name=„value“ pluginspage= "http://java.sun.com/products/plugin/1.2/plugin-install.html"> <NOEMBED> ... (Ersatztexte oder -grafiken) </NOEMBED> </EMBED> Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java PlugIn (Fortsetzung) Aufruf im Internet Explorer: <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93“ width="200" height="200“ codebase= "http://java.sun.com/products/plugin/1.2/jinstall-12-win32.cab#Version=1,2,0,0"> <PARAM NAME="code" VALUE=“classname.class"> <PARAM NAME="codebase" VALUE=“codebase_URL"> <PARAM NAME="type" VALUE="application/x-java-applet;version=1.2"> <PARAM NAME=“name" VALUE=“value"> ... (Ersatztexte oder -bilder) </OBJECT> Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Siehe http://www.javasoft.com/products/activator <!-- die folgenden Anweisungen werden nur einmal angeschrieben, am besten unmittelbar hinter die <BODY> Direktive --> <SCRIPT LANGUAGE="JavaScript"><!-- var _info = navigator.userAgent; var _ns = false; var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); //--></SCRIPT> <COMMENT><SCRIPT LANGUAGE="JavaScript1.1"><!-- var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || _info.indexOf("Sun") > 0)); //--></SCRIPT></COMMENT> <!-- die folgenden Anweisungen müssen für jedes Applet wiederholt werden --> if (_ie == true) document.writeln(' <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93“ width="200" height="200" align="baseline" codebase="http://java.sun.com/products/plugin/1.2/jinstall-12-win32.cab#Version=1,2,0,0"> <NOEMBED><XMP>'); else if (_ns == true) document.writeln(' <EMBED type="application/x-java-applet;version=1.2" width="200" height="200“ align="baseline" code=“classname.class" codebase=“URL" name=“value“ pluginspage="http://java.sun.com/products/plugin/1.2/plugin-install.html"> <NOEMBED><XMP>'); <APPLET code=“classname.class" codebase=“URL" align="baseline“ width="200" height="200"> </XMP> <PARAM NAME="java_code" VALUE=“classname.class"> <PARAM NAME="java_codebase" VALUE=“URL"> <PARAM NAME="java_type" VALUE="application/x-java-applet;version=1.2"> <PARAM NAME=“name" VALUE=“value"> ... (Ersatztexte oder -grafiken) </APPLET></NOEMBED></EMBED> </OBJECT> <!-- </APPLET> --> Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

JavaBeans Bridge for ActiveX macht aus JavaBeans - ActiveX Controls - OLE Automation Server verwendbar z.B. in VisualBasic, VisualC++, Delphi, Windows Scripting Host Zugriff auf - Daten (die meisten Datentypen) - Methoden Events/Exceptions JavaBean -> ActiveX-Host Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg

JavaBeans Bridge for ActiveX ist Bestandteil des Java PlugIn Anleitung siehe http://192.9.48.9/products/plugin/1.2/docs/script.html Registry File JavaBean Packager Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg TypeLib

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java2D Siehe http://www.javasoft.com/products/activator Derzeit nur als „early-access release“ für den Microsoft Internet Explorer verfügbar, eine Version für den Netscape Navigator soll im Frühjahr 1998 folgen

Java3D Modellierung, Manipulation und Darstellung drei-dimensionaler Szenen (VRML) Version 1.1.2 verfügbar unter http://www.javasoft.com/products/java-media/3D/ für - Windows (OpenGL und DirectX) - SunOS (OpenGL) Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg

JavaSound Bestandteil von Java 1.2 (http://java.sun.com/products/java-media/sound/) 64 Kanäle, 8/16 bit, 8kHz...48kHz Sample Rate Audio-Berechnung in Software MIDI-Unterstützung Dateiformate: AIFF, AU, WAV, MIDI 1/2, RMF (unkomprimiert, linear PCM) Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg

JavaSpeech Sprachausgabe und Spracherkennung (http://java.sun.com/products/java-media/speech/) JavaSpeech Grammar Format (JSGF) JavaSpeech Markup Language (JSML) verfügbare Implementierungen siehe http://java.sun.com/products/java-media/speech/ forDevelopers/jsapifaq.html#implementation - IBM „Speech for Java“ für Win95/98/NT (verlangt ViaVoice Gold, auch Spracherkennung) - Lernout & Hauspie für SunOS, Java 1.1.x (nur Wiedergabe) Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg

JavaSpeech (Beispiel) import javax.speech.*; import javax.speech.synthesis.*; import java.util.locale; public class HelloWorld { public static void main (String ArgList[]) { try { Synthesizer SpeechSynth = Central.createSynthesizer ( new SynthesizerModeDesc(Locale.ENGLISH) ); ...

JavaSpeech (Beispiel, Fortsetzung) ... SpeechSynth.allocate(); SpeechSynth.resume(); SpeechSynth.speakPlainText(„Hello, world!“, null); SpeechSynth.waitEngineState(Synthesizer.QUEUE_EMPTY); SpeechSynth.deallocate(); } catch (Exception Signal) { /* nop */ }; }; };

Java Media Framework Laden und Abspielen von - Audio-Datenströmen - Video-Datenströmen (MPEG, AVI) Empfang und Versand von Audio-/Video-Datenströmen via RTP/RTCP (Video Conferencing) erweiterbar z.B. durch - eigene CODECs - eigene Paketformate Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg

Java Shared Data Toolkit einfache API für „verteilte Applikationen“ Versand von Nachrichten an mehrere Kommunikationspartner implementierte Protokolle - TCP/IP - RMI (Remote Method Invocation) - LRMP (Lightweight Reliable Multicast) Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg

JavaMail Senden, Empfangen und Verwalten von Email-Nachrichten Unterstützung von SMTP, POP3 & IMAP4 Unterstützung von MIME-kompatiblen „Attachment“s Programmierschnittstelle ist stabil Beta-Version der Implementierung verfügbar Siehe: http://www.javasoft.com/products/javamail geplant als „Java Standard Extension“ - Programmierschnittstelle ist stabil - Beta-Version der Implementierung verfügbar Bildnachweis: - http://www.javasoft.com/images/javamail.jpg

Viel Spaß beim Ausprobieren!