Einführung in Java - Willkommen auf den Web

Werbung
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
Herunterladen