Einführung in Java 05.07. bis 09.07.1999 Einführung in Java Andreas Rozek Rechenzentrum Uni Stuttgart Abteilung PKB Telefon: (0711) 685-4514 Email: [email protected] http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Organisatorische Details • Fragebogen • Anwesenheitsliste • Teilnahmebescheinigung (nur bei ständiger Teilnahme) http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java „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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java „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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java „Lernziele“ (Fortsetzung) • Java‘s Welt - Überblick über vorhandene bzw. geplante Klassenbibliotheken - Überblick über weitere Laufzeitumgebungen und Produkte Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einführung in Java Teil I Java im Überblick http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java ist... (Fortsetzung) • Objekt-orientiert – – – – – – – Andreas Rozek 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 Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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“) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 HTMLspezifische Funktionen • Syntax ähnlich der von Java Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Versionsnummern • 1.0.2 • 1.1.x • 1.2.x (veraltet, jedoch beliebt für Applets) (Auslaufmodell, derzeit 1.1.7, 1.1.8) (aktuell, derzeit 1.2.1) Bugfix Release (keine API-Änderungen) Version (API-Änderungen/Erweiterungen) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Laufzeitumgebungen Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java „Standard“-Bibliotheken (Java 2) • • • • • • • Abstract Windows Toolkit, Swing Java Foundation Classes (JFC) Java IDL Java DataBase Connection (JDBC) JavaBeans Remote Method Invocation (RMI) Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java „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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java und das World-Wide Web • Java PlugIn • HotJava Browser HotJava HTML Component • Java WebServer Java Embedded Server (NanoServer) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Sonstige Entwicklungen (Auszug) • • • • JavaTelephony Java Shared Data Toolkit (JSDT) JavaSpeech Jini (siehe http://java.sun.com/products/index.html) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einsatzmöglichkeiten • WWW-basierte Programme – – – – – – Andreas Rozek Navigationshilfen Visualisierung von Daten Simulationen VRML-Scripting Animationen Audio Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einsatzmöglichkeiten (Fortsetzung) • Grafische Benutzeroberflächen (ggfs. „FrontEnds“ für externe Programme) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einsatzmöglichkeiten (Fortsetzung) • Rapid Prototyping • Verteilte Applikationen Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Entwicklungsumgebungen • • • • • • Sun‘s Java SDK Microsoft Visual J++ IBM VisualAge for Java Borland JBuilder Symantec Café Sun Java Workshop Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java IBM VisualAge for Java • grafische Entwicklungsumgebung • gewöhnungsbedürftige Benutzeroberfläche • eingeschränkte Version kostenlos im Internet verfügbar Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Borland JBuilder • ähnlich Delphi bzw. Borland C++ • unterstützt JavaBeans • Ressourcen-hungrig Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Sun Java Workshop/Java Studio • Entwicklungsumgebung in Form eines WWW-Browsers • in Java realisiert (sehr langsam) • Bedienung gewöhnungsbedürftig Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Viel Spaß beim Stöbern! Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einführung in Java Teil II Die Programmiersprache Java http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 {...} Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Bezeichner • max. 255 Zeichen • fast alle (Unicode-) Zeichen möglich außer – – – – – Andreas Rozek Leerzeichen, Steuerzeichen Operatorenzeichen (z.B. ‘+’, ‘-’, ‘/’, ...) Klammern (‘(‘, ‘)’, ‘[‘, ‘]’, ‘{‘, ‘}’) Interpunktionszeichen (‘.’, ‘,’, ‘;’, ...) von Java genutzte Sonderzeichen (‘$’, “””, “’”) Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Interne Klassenbibliotheken (Auszug) java.applet java.awt ... java.awt.event java.awt.image java.beans java.io java.lang java.math java.net java.rmi ... java.text java.util ... Andreas Rozek Web-Applets und “Zubehör” Grafische Benutzeroberflächen Ereignis-Behandlung Bearbeiten von Rastergrafiken JavaBeans Datei-Systeme und -Ein/Ausgabe zu Java gehörende Klassen beliebig genaue Arithmetik Netzwerkunterstützung Remote Method Invocation landesspezifische Textbehandlung Datenstrukturen etc. (zip-Archive) Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Primitive Datentypen • • • • • • • • boolean char byte short int long float double Andreas Rozek (true, false, 1 bit) (Unicode Zeichen, 16 bits) (-128...127, 8 bits) (-32768...32767, 16 bits) (-2147483648...+2147483647, 32 bits) ( +/-9223372036854775807, 64 bits) (32 bit IEEE 754 Fließkommazahl) (64 bit IEEE 754 Fließkommazahl) Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Referenz-Datentypen (Klassen) • String • type[ ] • classname Zeichenketten Felder Objekte • Arbeiten mit Referenzen – Sonderfall: null – Kopieren von Objekten – Vergleich von Objekten a = b.clone(); a.equals(b); • keine Pointer, Garbage Collection Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Zeichenketten (Fortsetzung) • Escape-Sequenzen – – – – – – – – – Andreas Rozek \b \t \n \f \r \‘, \“ \\ \xxx \uxxxx Rückschritt Tabulator Zeilenvorschub Seitenvorschub Wagenrücklauf einfaches/doppeltes Hochkomma Backslash Zeichen mit angegebenem Oktalcode Zeichen mit angegebenem Hexcode Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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}; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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}); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Operatoren-Hierarchie • • • • • • • • • ++, --, +, -, ~, !, (type) *, /, % +, <<, >>, >>> <, <=, >, >=, instanceof ==, != & ^ | Andreas Rozek • && • || • ?: • =, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |= Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Anweisungen • if/else-Anweisung if (...) ...; if (...) ...; else ...; if (...) ...; elseif (...) ...; else ...; • switch/case-Anweisung switch (...) { case ...: ...; case ...: ...; break; default: ...; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Anweisungen (Fortsetzung) • try/catch/finally-Anweisung try { ...; } catch (Throwable Signal) { ...; } finally { ...; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java Syntax (Fortsetzung) • Verlassen von Anweisungen: break • nächster Schleifendurchlauf: continue • Anweisungsmarken test: while (...) { try { if (...) continue test; if (...) break test; } finally {...}; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Aufbau einer Klassendatei package ...; import ...; public class classname extends ... implements ... { (Daten, Klassen-Initialisierungen, Konstruktoren, Methoden, innere Klassen) }; (evtl. weitere Klassen/Schnittstellen - nicht public) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Aufbau einer Schnittstellendatei package ...; import ...; public interface classname extends ... { (Konstanten, Methoden-Deklarationen) }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Innere Klassen class outer extends ... implements ... { ... class inner extends ... implements ... { ... }; ... }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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: – sonst: Andreas Rozek new inner (...) outer.new inner (...) Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Sichtbarkeit von Klassen/Schnittstellen • public sichtbar in allen Bibliotheken • (ohne Angaben) nur in derselben Bibliothek sichtbar Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Weitere Objekteigenschaften • • • • • • • abstract final native static synchronized transient volatile Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java versus C/C++ • kein Präprozessor – – – – • • • • echte Konstanten echtes “Inlining” von Methoden Entfernung von unbenutztem Code kein #include keine “Prototypen” keine globalen Variablen/Klassen keine Mehrfach-Vererbung keine “templates” Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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” Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java versus C/C++ (Fortsetzung) • keine Adressen/Pointer • automatische Speicherverwaltung (kein “malloc”, kein “free”) • kein “sizeof” • automatische Feldgrenzenüberwachung • kein Destruktor Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Programmbeispiel public class HelloWorld { public static void main (String args[ ]) { System.out.println("Hello, World!"); }; }; javac HelloWorld.java java HelloWorld Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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"); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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] + "\""); }; }; }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) + "\""); }; }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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" : "-"); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Zugriff auf das Dateisystem System.out.print(" "); if (EntryFile.isDirectory()) { System.out.println(EntryName + File.separator); } else { System.out.println(EntryName + " (" + EntryFile.length() + " bytes)"); }; }; }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Programm LineNumberReader FileReader Datei • operieren auf Dateien, Zeichenketten, Arrays, Pipes, Sockets Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 */}; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Viel Spaß beim Ausprobieren! Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einführung in Java Teil III Java und das World-Wide Web http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java und das World-Wide Web • Grafische Benutzeroberflächen • Applets • Netzwerk-Unterstützung Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Grafische Benutzeroberflächen • DisplayManager • WindowManager • Applikation Dekoration Zeichenbereich der Applikation Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Grafische Benutzeroberflächen hinteres Fenster ist teilweise verdeckt Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Grafische Benutzeroberflächen vorderes Fenster wird verschoben verdeckter Bereich muß neu gezeichnet werden Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Ereignisorientierte Programmierung Ereignis (Event) Mausbewegungen Mausklicks Tastatureingaben (weitere) Ereigniswarteschlange (Event Queue) Andreas Rozek Ereignisbehandlung Event Handling Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Oberflächen-Komponenten MenuBar ToolBar Button Canvas Grafiken Label Andreas Rozek Choice Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 EventBehandlungsroutinen Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Verfügbare Komponenten (AWT) • Component Button Canvas Checkbox Choice Label List Scrollbar TextComponent (TextArea, TextField) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Verfügbare Komponenten (Forts.) • Container Panel ScrollPane Window - Dialog, FileDialog - Frame Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Verfügbare Komponenten (Forts.) • MenuComponent - MenuBar - MenuItem - Menu, PopupMenu - CheckboxMenuItem Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Verfügbare Layout-Manager • • • • • BorderLayout CardLayout FlowLayout GridLayout GridBagLayout Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); setVisible(true); }; // Komponenten arrangieren // Fenster anzeigen public static void main (String Args[]) { AWT_00 Instance = new AWT_00(); // Frame erzeugen, AWT starten }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 }; }; ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Farben (Beispiele) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Zeichensätze (Beispiele) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); show(); }; // Komponenten arrangieren // Fenster anzeigen ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); setVisible(true); }; Andreas Rozek // Komponenten arrangieren // Fenster anzeigen Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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); }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Ereignisse und deren Bearbeitung processEvent • java.awt.AWTEvent AWTEvent - getID() Listener Listener Listener - getSource() Component.processEvent(AWTEvent Event) • import java.awt.event.*; - KeyEvent, MouseEvent, ActionEvent, ... - KeyListener, MouseListener, ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Ein fünftes AWT-Beispiel public class AWT_00 implements ActionListener { public AWT_00 () { ... OkButton.addActionListener(this); ... }; public actionPerformed (ActionEvent Event) { System.exit(0); }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.Label • new Label(Text) new Label(Text, Alignment) • setAlignment(Alignment) setText(Text) • (von Component geerbt) setForeground(Color) setBackground(Color) setFont(Font) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.Button • new Button() new Button(Label) • setLabel(Label) • setActionCommand(Command) addActionListener(Listener) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.Canvas, java.awt.Graphics • new Canvas() • paint(GrafContext) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.Checkbox • new Checkbox(Label) new Checkbox(Label, State) new Checkbox(Label, State, Group) • new CheckboxGroup() • setLabel(Label) setState(State) setCheckboxGroup(Group) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.Choice • new Choice() • add(Label) remove(Position), remove(Label) removeAll() select(Position), select(Label) getItemCount() getSelectedIndex() • addItemListener(Listener) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.TextField (Fortsetzung) • addActionListener(Listener) addTextListener(TextListener) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.TextArea (Fortsetzung) • setEditable(OnOff) setSelectionStart(Index) setSelectionEnd(Index) setColumns(Columns) setEchoChar(Character) • addTextListener(TextListener) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java java.awt.Image • Toolkit.getDefaultToolkit().getImage(FileName) Toolkit.getDefaultToolkit().getImage(URL) Toolkit.getDefaultToolkit().createImage(...) • ImageProducer ImageObserver ImageConsumer Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Aufbau eines Applets • • • • Applets werden vom Browser instanziert kein Textmodus, nur Grafik keine main()-Methode init wichtige Methoden: start public void init() public void start() public void stop() public void destroy() stop destroy public void paint(Graphics Graf) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Erscheinungsbild Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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"}, {..., ..., ...} }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Netzwerkunterstützung • import java.net.*; • numerische/symbolische IP-Adressen • URLs • Sockets (TCP/IP und UDP/IP, IP Multicast) • URLConnection (HTTP und FTP) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Sockets I (UDP) • new DatagramSocket() new DatagramSocket(localPort) new DatagramSocket(localPort, localAddr) • getLocalPort() Socket anlegen getLocalAddress() setSoTimeout(milliSecs) Socket definieren • send(Packet) receive(Packet) • close() Pakete senden Pakete empfangen Socket schließen Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Sockets I (UDP Pakete) • new DatagramPacket(Buffer,Length) new DatagramPacket(Buffer,Length, Address,Port) • setAddress(Address) setPort(Port) setData(Buffer) setLength(Length) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) { }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Sockets II (TCP) Client Server • 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" Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Sockets II (ServerSocket) • new ServerSocket(Port) new ServerSocket(Port, BackLog) new ServerSocket(Port, BackLog, localAddr) • getLocalPort() getInetAddress() setSoTimeout(milliSecs) • accept() -> Socket • close() Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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() Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) { }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) { }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) { }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Viel Spaß beim Ausprobieren! Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einführung in Java Teil IV Die „Java Foundation Classes“ http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java JFC/Swing Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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/ Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Model-View-Controller • Trennung von Daten, Ansicht und Funktion • ermöglicht z.B. mehrere Ansichten desselben Datensatzes • wird meist als “Model-Delegate” realisiert Model Ansicht Andreas Rozek View Rohdaten Controller Funktionalität Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Look-and-Feel • regelt - Aussehen, - Bedienung und - Verhalten von Benutzeroberflächen • in Swing implementiert - Windows - Motif - „Cross Plattform“ (Metal) - (Macintosh) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Swing Komponenten I JLabel JButton JTextField JList JTextArea JToolBar JSlider JChoice JScrollPane JTree JTabbedPane Andreas Rozek JToolTip JTable JProgressBar JSplitPane JMenu... Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Swing Komponenten II .showMessageDialog JFrame JDialog JInternalFrame .showWarningDialog .showInputDialog JColorChooser Andreas Rozek JFileChooser .showConfirmDialog Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Swing Komponenten III Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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); Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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); }; ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 }; }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); ... }; ... }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Vewendung der Zwischenablage • import java.awt.datatransfer.*; • lokale und system-weite Zwischenablagen Transferable Clipboard ClipboardOwner Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Clipboard, ClipboardOwner • Clipboard(Name) Toolkit.getDefaultToolkit().getSystemClipboard() • setContents(Transferable, Owner) • getContents(Requestor); • ClipboardOwner lostOwnership(Clipboard, Transferable) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java DataFlavour • DataFlavour(MimeType) DataFlavour(MimeType, Name) DataFlavour(RepresentationClass, Name); • DataFlavour.plainTextFlavour • DataFlavour.stringFlavour • DataFlavour.javaFileListFlavour • getHumanPresentableName(), getMimeType(), ... • getRepresentationClass() Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Transferable, StringSelection • getTransferDataFlavours() isDataFlavourSupported(Flavour) • getTransferData(Flavour) • StringSelection(Text) implementiert Transferable und ClipboardOwner Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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*/}; ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 „“; }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java DragGestureListener • dragGestureRecognized (DragGestureEvent) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java DragSource • DragSource() • createDefaultDragGestureRecognizer (Component, Actions, DragGestureListener) • startDrag (DragGestureEvent, Cursor, Transferable, DragSourceListener) • startDrag (DragGestureEvent, Cursor, Image, Point, Transferable, DragSourceListener) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java DragSourceListener • • • • • dragDropEnd(DragSourceDropEvent) dragEnter (DragSourceDropEvent) dragExit (DragSourceDropEvent) dragOver (DragSourceDropEvent) dropActionChanged(DragSourceDropEvent) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java DropTarget • DropTarget (Component, DropTargetListener) DropTarget (Component, Actions, DropTargetListener) • • • • • dragEnter (DropTargetDragEvent) dragOver (DropTargetDragEvent) dragExit (DropTargetDragEvent) drop (DropTargetDragEvent) dropActionChanged (DropTargetDragEvent) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java DropTargetDragEvent • acceptDrag (DragOperation) • rejectDrag () • getCurrentDataFlavours() • isDataFlavourSupported (DataFlavour) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java DropTargetDropEvent • acceptDrop (DropAction) • rejectDrop () • dropComplete (Success) • getCurrentDataFlavours() • isDataFlavourSupported (DataFlavour) • getTransferable() Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 ); ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) { }; ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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(); }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java Reflection • Ermöglicht - Untersuchung von Bibliotheken & Klassen - expliziten Aufruf von Konstruktoren/Methoden - expliziten Zugriff auf Attribute • • • • • Package Class Constructor Field Method Andreas Rozek Zugriff auf Klassenbibliothek Laden/Untersuchen von Klassen Zugriff auf Konstruktoren Zugriff auf Attribute Zugriff auf Methoden Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java JavaBeans • Komponenten mit wohldefinierten Schnittstellen zur Verwendung in visuellen Entwicklungsumgebungen • JavaBean darf “unsichtbar” sein Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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“ Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 JavaTutorial Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java JavaBeans allgemein (Fortsetzung) • Beans Development Kit (Java BDK) http://java.sun.com/beans/software/bdk_download.html Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Viel Spaß beim Ausprobieren! Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Einführung in Java Teil V Java‘s Welt http://WWW-KS.RUS.Uni-Stuttgart.De/People/Rozek/World/Java/Kurs Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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> Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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> Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java <!-- 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 --> <SCRIPT LANGUAGE="JavaScript"><!-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>'); //--></SCRIPT> <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 code=“classname.class" codebase=“URL" align="baseline“ width="200" height="200"> <PARAM NAME=“name" VALUE=“value"> ... (Ersatztexte oder -grafiken) </APPLET> --> Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 TypeLib Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java2D Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) ); ... Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java JavaSpeech (Beispiel, Fortsetzung) ... SpeechSynth.allocate(); SpeechSynth.resume(); SpeechSynth.speakPlainText(„Hello, world!“, null); SpeechSynth.waitEngineState(Synthesizer.QUEUE_EMPTY); SpeechSynth.deallocate(); } catch (Exception Signal) { /* nop */ }; }; }; Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Java Media Framework • Laden und Abspielen von - Audio-Datenströmen - Video-Datenströmen (MPEG, AVI) • Empfang und Versand von Audio-/VideoDatenströmen via RTP/RTCP (Video Conferencing) • erweiterbar z.B. durch - eigene CODECs - eigene Paketformate Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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) Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java 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 Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart Einführung in Java Viel Spaß beim Ausprobieren! Andreas Rozek Abteilung PKB, Rechenzentrum Uni Stuttgart