Java SE 8 Standard-Bibliothek – Das Handbuch für Java
Transcription
Java SE 8 Standard-Bibliothek – Das Handbuch für Java
Auf einen Blick Auf einen Blick 1 Neues in Java 8 und Java 7 .............................................................................................. 43 2 Fortgeschrittene String-Verarbeitung ........................................................................ 121 3 Threads und nebenläufige Programmierung ........................................................... 177 4 Datenstrukturen und Algorithmen .............................................................................. 275 5 Raum und Zeit ..................................................................................................................... 443 6 Dateien, Verzeichnisse und Dateizugriffe ................................................................. 509 7 Datenströme ........................................................................................................................ 573 8 Die eXtensible Markup Language (XML) .................................................................... 665 9 Dateiformate ....................................................................................................................... 749 10 Grafische Oberflächen mit Swing ................................................................................ 777 11 Grafikprogrammierung .................................................................................................... 975 12 JavaFX ..................................................................................................................................... 1031 13 Netzwerkprogrammierung ............................................................................................. 1077 14 Verteilte Programmierung mit RMI ............................................................................. 1145 15 RESTful und SOAP-Web-Services .................................................................................. 1165 16 Technologien für die Infrastruktur .............................................................................. 1185 17 Typen, Reflection und Annotationen .......................................................................... 1203 18 Dynamische Übersetzung und Skriptsprachen ....................................................... 1269 19 Logging und Monitoring .................................................................................................. 1293 20 Sicherheitskonzepte .......................................................................................................... 1315 21 Datenbankmanagement mit JDBC .............................................................................. 1337 22 Java Native Interface (JNI) ............................................................................................... 1383 23 Dienstprogramme für die Java-Umgebung .............................................................. 1401 Inhalt Inhalt Vorwort .................................................................................................................................................................. 35 1 Neues in Java 8 und Java 7 43 Sprachänderungen in Java 8 ....................................................................................................... 43 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 Statische ausprogrammierte Methoden in Schnittstellen ................................. Default-Methoden ............................................................................................................ Erweiterte Schnittstellen deklarieren und nutzen ................................................ Erweiterte Schnittstellen, Mehrfachvererbung und Mehrdeutigkeiten * ..... Bausteine bilden mit Default-Methoden * ............................................................... 43 44 46 49 53 Lambda-Ausdrücke und funktionale Programmierung .................................................. 59 1.2.1 1.2.2 Code = Daten ...................................................................................................................... Funktionale Schnittstellen und Lambda-Ausdrücke im Detail .......................... 59 62 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.2.10 Methoden-Referenz ......................................................................................................... Konstruktor-Referenz ...................................................................................................... Implementierung von Lambda-Ausdrücken ............................................................ Funktionale Programmierung mit Java ..................................................................... Funktionale Schnittstelle aus dem java.util.function-Paket .............................. Optional ist keine Nullnummer ................................................................................... Was ist jetzt so funktional? ........................................................................................... Zum Weiterlesen ............................................................................................................... 80 83 86 87 91 104 114 116 1.3 Bibliotheksänderungen in Java 8 .............................................................................................. 117 1.4 JDK 8-HotSpot-JVM-Änderungen ............................................................................................. 117 1.5 Auf Java 7/8-Syntax mit NetBeans und Eclipse migrieren ............................................ 117 1.5.1 1.5.2 1.5.3 Java 8-Syntax-Migration mit NetBeans .................................................................... Java 8-Syntax-Migration mit Eclipse .......................................................................... File-Klassen auf NIO.2 umstellen ................................................................................. 118 119 119 1.6 Zum Weiterlesen .............................................................................................................................. 120 2 Fortgeschrittene String-Verarbeitung 121 2.1 Erweitere Zeicheneigenschaften .............................................................................................. 121 2.1.1 2.1.2 2.1.3 121 122 122 1.1 1.2 isXXX(….)-Methoden ......................................................................................................... Unicode-Blöcke .................................................................................................................. Unicode-Skripte ................................................................................................................. 5 Inhalt Inhalt 2.2 2.3 2.4 2.5 Reguläre Ausdrücke ......................................................................................................................... 123 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 124 127 132 134 134 135 137 139 Zerlegen von Zeichenketten ........................................................................................................ 140 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 Zerlegen von Zeichensequenzen über String oder Pattern ................................. Mehr vom Scanner ............................................................................................................ Die Klasse StringTokenizer * .......................................................................................... BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner * ............................. StreamTokenizer * ............................................................................................................. 140 141 146 148 151 Zeichenkodierungen, XML/HTML-Entities, Base64 * ....................................................... 154 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 154 154 155 156 156 158 Unicode und 8-Bit-Abbildungen .................................................................................. Kodierungen über die Klasse String vornehmen .................................................... Das Paket java.nio.charset und der Typ Charset ..................................................... Konvertieren mit OutputStreamWriter-/InputStreamReader-Klassen .......... XML/HTML-Entities ausmaskieren .............................................................................. Base64-Kodierung ............................................................................................................. Ausgaben formatieren ................................................................................................................... 159 2.5.1 2.5.2 Die Formatter-Klasse * ..................................................................................................... Formatieren mit Masken * ............................................................................................. 159 162 2.5.3 2.5.4 Format-Klassen .................................................................................................................. Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren * ....................................................................................... MessageFormat und Pluralbildung mit ChoiceFormat ........................................ 163 2.5.5 2.6 Pattern.matches(…) bzw. String#matches(…) .......................................................... Die Klassen Pattern und Matcher ................................................................................ Finden und nicht matchen ............................................................................................. Gruppen ................................................................................................................................ Gierige und nicht gierige Operatoren * ...................................................................... Mit MatchResult alle Ergebnisse einsammeln * ..................................................... Suchen und Ersetzen mit Mustern .............................................................................. Hangman Version 2 .......................................................................................................... 166 169 Sprachabhängiges Vergleichen und Normalisierung * .................................................... 170 2.6.1 Die Klasse Collator ............................................................................................................ 171 2.6.2 2.6.3 Effiziente interne Speicherung für die Sortierung ................................................. Normalisierung .................................................................................................................. 173 174 2.7 Phonetische Vergleiche * .............................................................................................................. 175 2.8 Zum Weiterlesen .............................................................................................................................. 176 6 3 Threads und nebenläufige Programmierung 3.1 Threads erzeugen ............................................................................................................................. 177 3.1.1 3.1.2 3.1.3 Threads über die Schnittstelle Runnable implementieren ................................. Thread mit Runnable starten ........................................................................................ Die Klasse Thread erweitern ......................................................................................... 177 178 180 Thread-Eigenschaften und -Zustände .................................................................................... 182 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 Der Name eines Threads ................................................................................................ Wer bin ich? ........................................................................................................................ Die Zustände eines Threads * ....................................................................................... Schläfer gesucht ................................................................................................................ Mit yield() auf Rechenzeit verzichten ......................................................................... 182 183 183 184 186 3.2.6 3.2.7 3.2.8 3.2.9 3.2.10 3.2.11 3.2.12 3.2.13 Der Thread als Dämon ..................................................................................................... Freiheit für den Thread – das Ende ............................................................................. Einen Thread höflich mit Interrupt beenden ........................................................... UncaughtExceptionHandler für unbehandelte Ausnahmen ............................. Der stop() von außen und die Rettung mit ThreadDeath * ................................. Ein Rendezvous mit join(…) * ......................................................................................... Arbeit niederlegen und wieder aufnehmen * .......................................................... Priorität * .............................................................................................................................. 187 189 189 191 192 194 196 196 Der Ausführer (Executor) kommt .............................................................................................. 197 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 198 199 201 204 3.2 3.3 3.4 Die Schnittstelle Executor .............................................................................................. Glücklich in der Gruppe – die Thread-Pools ............................................................. Threads mit Rückgabe über Callable .......................................................................... Mehrere Callable abarbeiten ........................................................................................ ScheduledExecutorService für wiederholende Ausgaben und Zeitsteuerungen nutzen ................................................................................................. 177 205 Synchronisation über kritische Abschnitte .......................................................................... 206 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9 3.4.10 3.4.11 206 206 208 210 211 212 219 220 221 222 223 Gemeinsam genutzte Daten ......................................................................................... Probleme beim gemeinsamen Zugriff und kritische Abschnitte ...................... Punkte nebenläufig initialisieren ................................................................................ i++ sieht atomar aus, ist es aber nicht * .................................................................... Kritische Abschnitte schützen ...................................................................................... Kritische Abschnitte mit ReentrantLock schützen ................................................. Synchronisieren mit synchronized .............................................................................. Synchronized-Methoden der Klasse StringBuffer * ............................................... Mit synchronized synchronisierte Blöcke ................................................................. Dann machen wir doch gleich alles synchronisiert! ............................................. Lock-Freigabe im Fall von Exceptions ......................................................................... 7 Inhalt Inhalt 3.4.12 3.4.13 3.4.14 3.4.15 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 8 Deadlocks ............................................................................................................................. Mit synchronized nachträglich synchronisieren * .................................................. Monitore sind reentrant – gut für die Geschwindigkeit * ................................... Synchronisierte Methodenaufrufe zusammenfassen * ....................................... 224 226 227 228 Synchronisation über Warten und Benachrichtigen ........................................................ 229 3.5.1 3.5.2 3.5.3 3.5.4 Die Schnittstelle Condition ............................................................................................ It’s Disco-Time * ................................................................................................................. Warten mit wait(…) und Aufwecken mit notify()/notifyAll() * ........................... Falls der Lock fehlt – IllegalMonitorStateException * ........................................... 230 233 237 239 Datensynchronisation durch besondere Concurrency-Klassen * ................................ 240 3.6.1 3.6.2 3.6.3 241 244 246 Semaphor ............................................................................................................................. Barrier und Austausch ..................................................................................................... Stop and go mit Exchanger ............................................................................................ Atomare Operationen und frische Werte mit volatile * ................................................. 246 3.7.1 3.7.2 247 248 Der Modifizierer volatile bei Objekt-/Klassenvariablen ....................................... Das Paket java.util.concurrent.atomic ....................................................................... Teile und herrsche mit Fork und Join * .................................................................................... 250 3.8.1 3.8.2 Algorithmendesign per »teile und herrsche« .......................................................... Nebenläufiges Lösen von D&C-Algorithmen ........................................................... 250 252 3.8.3 Fork und Join ....................................................................................................................... 253 CompletionStage und CompletableFuture * ........................................................................ 256 Mit dem Thread verbundene Variablen * .............................................................................. 257 3.10.1 3.10.2 3.10.3 3.10.4 257 259 260 262 ThreadLocal ......................................................................................................................... InheritableThreadLocal .................................................................................................... ThreadLocalRandom als schneller nebenläufiger Zufallszahlengenerator ... ThreadLocal bei der Performance-Optimierung ..................................................... Threads in einer Thread-Gruppe * ............................................................................................. 263 3.11.1 3.11.2 Aktive Threads in der Umgebung ................................................................................ Etwas über die aktuelle Thread-Gruppe herausfinden ........................................ 263 264 3.11.3 3.11.4 Threads in einer Thread-Gruppe anlegen ................................................................. Methoden von Thread und ThreadGroup im Vergleich ....................................... 266 269 Zeitgesteuerte Abläufe .................................................................................................................. 270 3.12.1 3.12.2 Die Typen Timer und TimerTask ................................................................................... Job-Scheduler Quartz ....................................................................................................... 271 272 Einen Abbruch der virtuellen Maschine erkennen ............................................................ 273 3.13.1 3.13.2 273 274 Shutdown-Hook ................................................................................................................. Signale ................................................................................................................................... Zum Weiterlesen .............................................................................................................................. 274 4 4.1 4.2 4.3 4.4 4.5 4.6 Datenstrukturen und Algorithmen 275 Datenstrukturen und die Collection-API ............................................................................... 275 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 276 276 277 277 278 282 284 285 286 Designprinzip mit Schnittstellen, abstrakten und konkreten Klassen ........... Die Basisschnittstellen Collection und Map ............................................................ Die Utility-Klassen Collections und Arrays ............................................................... Das erste Programm mit Container-Klassen ........................................................... Die Schnittstelle Collection und Kernkonzepte ...................................................... Schnittstellen, die Collection erweitern, und Map ................................................ Konkrete Container-Klassen .......................................................................................... Generische Datentypen in der Collection-API ......................................................... Die Schnittstelle Iterable und das erweiterte for ................................................... Listen ...................................................................................................................................................... 287 4.2.1 4.2.2 Erstes Listen-Beispiel ....................................................................................................... Auswahlkriterium ArrayList oder LinkedList ............................................................ 287 288 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 Die Schnittstelle List ........................................................................................................ ArrayList ............................................................................................................................... LinkedList ............................................................................................................................. Der Feld-Adapter Arrays.asList(…) ................................................................................ ListIterator * ........................................................................................................................ toArray(…) von Collection verstehen – die Gefahr einer Falle erkennen ........ Primitive Elemente in Datenstrukturen verwalten ............................................... 289 295 296 298 300 301 304 Mengen (Sets) .................................................................................................................................... 305 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 Ein erstes Mengen-Beispiel ........................................................................................... Methoden der Schnittstelle Set ................................................................................... HashSet ................................................................................................................................ TreeSet – die sortierte Menge ...................................................................................... Die Schnittstellen NavigableSet und SortedSet ..................................................... LinkedHashSet ................................................................................................................... 305 307 309 309 311 313 Queues (Schlangen) und Deques .............................................................................................. 314 4.4.1 4.4.2 4.4.3 4.4.4 Queue-Klassen ................................................................................................................... Deque-Klassen ................................................................................................................... Blockierende Queues und Prioritätswarteschlangen ........................................... PriorityQueue ..................................................................................................................... 315 316 317 318 Stack (Kellerspeicher, Stapel) ..................................................................................................... 323 4.5.1 Die Methoden von java.util.Stack ................................................................................ 324 Assoziative Speicher ....................................................................................................................... 325 4.6.1 Die Klassen HashMap und TreeMap .......................................................................... 325 4.6.2 Einfügen und Abfragen des Assoziativspeichers ................................................... 327 9 Inhalt Inhalt 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.6.8 4.6.9 4.6.10 Über die Bedeutung von equals(…) und hashCode() bei Elementen ................ Eigene Objekte hashen .................................................................................................... LinkedHashMap und LRU-Implementierungen ...................................................... IdentityHashMap ............................................................................................................... Das Problem veränderter Elemente ............................................................................ Aufzählungen und Ansichten des Assoziativspeichers ........................................ Die Arbeitsweise einer Hash-Tabelle * ....................................................................... Die Properties-Klasse ....................................................................................................... 334 335 336 337 338 338 342 344 4.7 Mit einem Iterator durch die Daten wandern ..................................................................... 348 4.8 Iterator-Schnittstelle ...................................................................................................................... 348 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.9 4.10 10 Der Iterator kann (eventuell auch) löschen .............................................................. Operationen auf allen Elementen durchführen ..................................................... Einen Zufallszahlen-Iterator schreiben ...................................................................... Iteratoren von Sammlungen, das erweiterte for und Iterable ........................... Fail-Fast-Iterator und die ConcurrentModificationException ............................ Die Schnittstelle Enumerator * ..................................................................................... 349 349 350 351 355 356 Algorithmen in Collections .......................................................................................................... 358 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.9.7 4.9.8 4.9.9 4.9.10 4.9.11 4.9.12 Die Bedeutung von Ordnung mit Comparator und Comparable ...................... Sortieren ............................................................................................................................... Den größten und kleinsten Wert einer Collection finden ................................... Nichtänderbare Datenstrukturen, immutable oder nur lesen? ........................ Null Object Pattern und leere Sammlungen/Iteratoren zurückgeben ........... Echte typsichere Container ............................................................................................ Mit der Halbierungssuche nach Elementen fahnden ........................................... Ersetzen, Kopieren, Füllen, Umdrehen, Rotieren * .................................................. Listen durchwürfeln * ....................................................................................................... Häufigkeit eines Elements * ........................................................................................... Singletons * .......................................................................................................................... nCopies(…) * ......................................................................................................................... 359 360 363 365 369 372 373 375 376 377 378 378 Datenstrukturen mit Änderungsmeldungen ....................................................................... 379 4.10.1 4.10.2 4.10.3 4.10.4 4.10.5 4.10.6 4.10.7 4.10.8 4.10.9 379 380 382 382 383 385 386 387 388 Das Paket javafx.collections .......................................................................................... Fabrikmethoden in FXCollections ................................................................................ Änderungen melden über InvalidationListener ...................................................... Änderungen melden über XXXChangeListener ...................................................... Change-Klassen ................................................................................................................. Weitere Hilfsmethoden einer ObservableList ......................................................... Melden von Änderungen an Arrays ............................................................................. Transformierte FXCollections ........................................................................................ Weitere statische Methoden in FXCollections ........................................................ 4.11 4.12 4.13 Stream-API .......................................................................................................................................... 389 4.11.1 4.11.2 4.11.3 4.11.4 4.11.5 4.11.6 4.11.7 4.11.8 Stream erzeugen ............................................................................................................... Terminale Operationen ................................................................................................... Intermediäre Operationen ............................................................................................. Streams mit primitiven Werten ................................................................................... Stream-Beziehungen, AutoCloseable ........................................................................ Stream-Builder ................................................................................................................... Spliterator ............................................................................................................................ Klasse StreamSupport ..................................................................................................... 391 393 404 408 419 421 422 422 Spezielle threadsichere Datenstrukturen ............................................................................. 423 4.12.1 4.12.2 4.12.3 4.12.4 4.12.5 4.12.6 Zu Beginn nur synchronisierte Datenstrukturen in Java 1.0 ............................... Nicht synchronisierte Datenstrukturen in der Standard-Collection-API ....... Nebenläufiger Assoziativspeicher und die Schnittstelle ConcurrentMap ..... ConcurrentLinkedQueue ................................................................................................ CopyOnWriteArrayList und CopyOnWriteArraySet ............................................... Wrapper zur Synchronisation ....................................................................................... 423 423 424 424 424 425 4.12.7 4.12.8 4.12.9 4.12.10 Blockierende Warteschlangen ...................................................................................... ArrayBlockingQueue und LinkedBlockingQueue .................................................... PriorityBlockingQueue .................................................................................................... Transfer-Warteschlangen – TransferQueue und LinkedTransferQueue ....... 426 427 428 432 Google Guava (Google Collections Library) .......................................................................... 432 4.13.1 4.13.2 4.13.3 4.13.4 4.13.5 Beispiel Multi-Set und Multi-Map ............................................................................... Datenstrukturen aus Guava .......................................................................................... Utility-Klassen von Guava .............................................................................................. Prädikate .............................................................................................................................. Transformationen ............................................................................................................. 433 433 436 436 437 Die Klasse BitSet für Bitmengen * ............................................................................................ 437 4.14.1 4.14.2 Ein BitSet anlegen ............................................................................................................. BitSet füllen und Zustände erfragen .......................................................................... 438 439 4.14.3 4.14.4 4.14.5 Mengenorientierte Operationen ................................................................................. Weitere Methoden von BitSet ...................................................................................... Primzahlen in einem BitSet verwalten ...................................................................... 440 441 442 4.15 Zum Weiterlesen .............................................................................................................................. 442 5 Raum und Zeit 443 5.1 Weltzeit * ............................................................................................................................................. 443 5.2 Wichtige Datum-Klassen im Überblick .................................................................................. 444 5.2.1 445 4.14 Der 1.1.1970 .......................................................................................................................... 11 Inhalt Inhalt 5.2.2 5.2.3 5.3 5.4 5.5 5.6 5.7 5.8 5.9 12 System.currentTimeMillis() ............................................................................................ Einfache Zeitumrechnungen durch TimeUnit ......................................................... 445 445 5.9.8 5.9.9 5.9.10 5.9.11 5.9.12 5.9.13 5.9.14 5.9.15 Klasse Year ........................................................................................................................... Zeitzonen-Klassen ZoneId und ZoneOffset .............................................................. Temporale Klassen mit Zeitzoneninformationen .................................................. Klassen Period und Duration ........................................................................................ Klasse Instant ..................................................................................................................... Parsen und Formatieren von Datumszeitwerten .................................................. Das Paket java.time.temporal * .................................................................................... Konvertierungen zwischen der klassischen API und Date-Time-API ............... 492 492 493 497 499 500 500 505 5.10 Die Default-Falle ............................................................................................................................... 506 5.11 Zum Weiterlesen .............................................................................................................................. 507 Sprachen der Länder ........................................................................................................................ 446 5.3.1 Sprachen und Regionen über Locale-Objekte .......................................................... 447 Internationalisierung und Lokalisierung ............................................................................... 449 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 ResourceBundle-Objekte und Ressource-Dateien ................................................. Ressource-Dateien zur Lokalisierung .......................................................................... Die Klasse ResourceBundle ............................................................................................ Ladestrategie für ResourceBundle-Objekte .............................................................. Ladeprozess und Format anpassen * .......................................................................... 450 450 452 452 453 Die Klasse Date .................................................................................................................................. 455 5.5.1 5.5.2 Objekte erzeugen und Methoden nutzen ................................................................. Date-Objekte sind nicht immutable ........................................................................... 455 457 6 Dateien, Verzeichnisse und Dateizugriffe 509 Calendar und GregorianCalendar ............................................................................................. 457 6.1 Alte und neue Welt in java.io und java.nio .......................................................................... 509 5.6.1 5.6.2 Die abstrakte Klasse Calendar ...................................................................................... Calendar nach Date und Millisekunden fragen ...................................................... 458 459 6.1.1 6.1.2 java.io-Paket mit File-Klasse .......................................................................................... NIO.2 und java.nio-Paket ................................................................................................ 509 510 5.6.3 5.6.4 5.6.5 5.6.6 5.6.7 5.6.8 Abfragen und Setzen von Datumselementen über Feldbezeichner ................ Kalender-Typen * ............................................................................................................... Kalender-Exemplare bauen über den Calendar.Builder ....................................... Wie viele Tage hat der Monat, oder wie viele Monate hat ein Jahr? * ............ Wann beginnt die Woche und wann die erste Woche im Jahr? * ..................... Der gregorianische Kalender ......................................................................................... 459 463 463 464 465 467 Dateisysteme und Pfade ............................................................................................................... 510 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 510 516 518 520 Zeitzonen in Java * ........................................................................................................................... 470 5.7.1 5.7.2 5.7.3 Zeitzonen durch die Klasse TimeZone repräsentieren ......................................... SimpleTimeZone ................................................................................................................ Methoden von TimeZone ............................................................................................... 470 471 473 FileSystem und Path ........................................................................................................ Die Utility-Klasse Files ..................................................................................................... Dateien kopieren und verschieben ............................................................................. Dateiattribute * .................................................................................................................. Neue Dateien, Verzeichnisse, symbolische Verknüpfungen anlegen und löschen ......................................................................................................................... MIME-Typen herausfinden * ......................................................................................... Verzeichnislistings (DirectoryStream/Stream) und Filter * ................................ Rekursives Ablaufen des Verzeichnisbaums * ......................................................... Rekursiv nach Dateien/Ordnern suchen mit Files.find(…) * ................................ Dateisysteme und Dateisystemattribute * .............................................................. Verzeichnisse im Dateisystem überwachen * ......................................................... 539 543 6.2 Formatieren und Parsen von Datumsangaben ................................................................... 474 6.2.6 6.2.7 6.2.8 6.2.9 5.8.1 5.8.2 Ausgaben mit printf(…) ................................................................................................... Ausgaben mit Calendar-Methoden getDisplayName(…) * .................................. 474 475 6.2.10 6.2.11 5.8.3 5.8.4 Mit DateFormat und SimpleDateFormat formatieren ......................................... Parsen von Datumswerten ............................................................................................ 475 481 Date-Time-API in Java 8 ................................................................................................................. 483 5.9.1 5.9.2 5.9.3 5.9.4 5.9.5 5.9.6 5.9.7 487 488 489 490 490 491 491 Datumsklasse LocalDate ................................................................................................. Ostertage * ........................................................................................................................... Die Klasse YearMonth ...................................................................................................... Die Klasse MonthDay ....................................................................................................... Aufzählung DayOfWeek und Month .......................................................................... Klasse LocalTime ................................................................................................................ Klasse LocalDateTime ...................................................................................................... 6.3 529 531 532 535 538 Datei- und Verzeichnis-Operationen mit der Klasse File ............................................... 545 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.3.8 6.3.9 545 549 549 552 552 556 557 558 561 Dateien und Verzeichnisse mit der Klasse File ....................................................... Verzeichnis oder Datei? Existiert es? .......................................................................... Verzeichnis- und Dateieigenschaften/-attribute .................................................. Umbenennen und Verzeichnisse anlegen ................................................................ Verzeichnisse auflisten und Dateien filtern ............................................................ Dateien berühren, neue Dateien anlegen, temporäre Dateien ........................ Dateien und Verzeichnisse löschen ............................................................................ Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher * .................................... URL-, URI- und Path-Objekte aus einem File-Objekt ableiten * ......................... 13 Inhalt Inhalt 6.3.10 6.3.11 6.3.12 6.4 6.5 Mit Locking Dateien sperren * ....................................................................................... Sicherheitsprüfung * ........................................................................................................ Zugriff auf SMB-Server mit jCIFS * ............................................................................... 561 563 563 Dateien mit wahlfreiem Zugriff ................................................................................................. 563 6.4.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen .................................... 564 6.4.2 6.4.3 6.4.4 6.4.5 Aus dem RandomAccessFile lesen ............................................................................... Schreiben mit RandomAccessFile ................................................................................ Die Länge des RandomAccessFile ................................................................................ Hin und her in der Datei .................................................................................................. 565 567 567 568 Wahlfreier Zugriff mit SeekableByteChannel und ByteBuffer * ................................. 569 6.5.1 6.5.2 6.5.3 6.5.4 SeekableByteChannel ...................................................................................................... ByteBuffer ............................................................................................................................ Beispiel mit Path + SeekableByteChannel + ByteBuffer ....................................... FileChannel .......................................................................................................................... 569 570 570 571 6.6 Zum Weiterlesen .............................................................................................................................. 572 7 Datenströme 573 7.1 7.2 7.3 14 7.4 7.5 7.6 Stream-Klassen für Bytes und Zeichen ................................................................................... 573 7.1.1 7.1.2 7.1.3 Lesen aus Dateien und Schreiben in Dateien .......................................................... Byteorientierte Datenströme über Files beziehen ................................................. Zeichenorientierte Datenströme über Files beziehen .......................................... 574 574 575 7.1.4 7.1.5 7.1.6 Funktion von OpenOption bei den Files.newXXX(…)-Methoden ....................... Ressourcen aus dem Klassenpfad und aus JAR-Archiven laden ........................ Die Schnittstellen Closeable, AutoCloseable und Flushable .............................. 576 578 579 7.7 Basisklassen für die Ein-/Ausgabe ............................................................................................ 581 7.8 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.2.9 Die abstrakten Basisklassen .......................................................................................... Übersicht über Ein-/Ausgabeklassen ......................................................................... Die abstrakte Basisklasse OutputStream .................................................................. Ein Datenschlucker * ......................................................................................................... Die abstrakte Basisklasse InputStream ...................................................................... Ströme mit SequenceInputStream zusammensetzen * ....................................... Die abstrakte Basisklasse Writer .................................................................................. Die Schnittstelle Appendable * ..................................................................................... Die abstrakte Basisklasse Reader ................................................................................. 581 581 584 585 586 587 589 591 591 Formatierte Textausgaben ........................................................................................................... 594 7.3.1 7.3.2 594 600 Die Klassen PrintWriter und PrintStream ................................................................. System.out, System.err und System.in ....................................................................... 7.9 7.10 Die FileXXX-Stromklassen ........................................................................................................... 602 7.4.1 7.4.2 7.4.3 7.4.4 Kopieren mit FileOutputStream und FileInputStream ......................................... Das FileDescriptor-Objekt * ........................................................................................... Mit dem FileWriter Texte in Dateien schreiben ..................................................... Zeichen mit der Klasse FileReader lesen ................................................................... 603 606 607 608 Schreiben und Lesen aus Strings und Byte-Feldern .......................................................... 609 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 Mit dem StringWriter ein String-Objekt füllen ....................................................... CharArrayWriter ................................................................................................................ StringReader und CharArrayReader ............................................................................ Mit ByteArrayOutputStream in ein Byte-Feld schreiben ..................................... Mit ByteArrayInputStream aus einem Byte-Feld lesen ........................................ 609 610 611 612 613 Datenströme filtern und verketten ......................................................................................... 614 7.6.1 7.6.2 Streams als Filter verketten (verschachteln) ........................................................... Gepufferte Ausgaben mit BufferedWriter und BufferedOutputStream ....... 615 616 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.8 7.6.9 7.6.10 7.6.11 Gepufferte Eingaben mit BufferedReader/BufferedInputStream ................... LineNumberReader zählt automatisch Zeilen mit * .............................................. Daten mit der Klasse PushbackReader zurücklegen * .......................................... DataOutputStream/DataInputStream * ................................................................... Basisklassen für Filter * ................................................................................................... Die Basisklasse FilterWriter * ........................................................................................ Ein LowerCaseWriter * ..................................................................................................... Eingaben mit der Klasse FilterReader filtern * ......................................................... Anwendungen für FilterReader und FilterWriter * ................................................ 618 619 620 623 623 624 625 626 627 Vermittler zwischen Byte-Streams und Unicode-Strömen ........................................... 633 7.7.1 7.7.2 Datenkonvertierung durch den OutputStreamWriter ......................................... Automatische Konvertierungen mit dem InputStreamReader ......................... 633 634 Kommunikation zwischen Threads mit Pipes * .................................................................. 636 7.8.1 7.8.2 636 638 PipedOutputStream und PipedInputStream ........................................................... PipedWriter und PipedReader ...................................................................................... Prüfsummen ....................................................................................................................................... 640 7.9.1 7.9.2 7.9.3 640 641 643 Die Schnittstelle Checksum ........................................................................................... Die Klasse CRC32 ............................................................................................................... Die Adler32-Klasse ............................................................................................................ Persistente Objekte und Serialisierung .................................................................................. 643 7.10.1 7.10.2 Objekte mit der Standardserialisierung speichern und lesen ........................... Zwei einfache Anwendungen der Serialisierung * ................................................. 644 647 7.10.3 7.10.4 7.10.5 Die Schnittstelle Serializable ......................................................................................... Nicht serialisierbare Attribute aussparen ................................................................ Das Abspeichern selbst in die Hand nehmen .......................................................... 648 650 652 15 Inhalt Inhalt 7.10.6 7.10.7 7.10.8 7.10.9 8.5 Serielle Verarbeitung mit StAX .................................................................................................. 704 8.5.1 8.5.2 8.5.3 8.5.4 8.5.5 704 706 709 712 713 Tiefe Objektkopien * ......................................................................................................... Versionenverwaltung und die SUID ............................................................................ Wie die ArrayList serialisiert * ........................................................................................ Probleme mit der Serialisierung ................................................................................... 655 657 659 660 Alternative Datenaustauschformate ...................................................................................... 661 7.11.1 7.11.2 7.11.3 7.11.4 Serialisieren in XML-Dateien ......................................................................................... XML-Serialisierung von JavaBeans mit JavaBeans Persistence * ....................... Die Open-Source-Bibliothek XStream * ...................................................................... Binäre Serialisierung mit Google Protocol Buffers * .............................................. 661 661 663 664 7.12 Zum Weiterlesen .............................................................................................................................. 664 8 Die eXtensible Markup Language (XML) XML-Dateien mit JDOM verarbeiten ....................................................................................... 721 665 8.7.1 8.7.2 JDOM beziehen .................................................................................................................. Paketübersicht * ................................................................................................................ 721 722 8.1 Auszeichnungssprachen ................................................................................................................ 665 8.1.1 8.1.2 665 666 8.7.3 8.7.4 8.7.5 8.7.6 8.7.7 8.7.8 8.7.9 8.7.10 8.7.11 8.7.12 Die Document-Klasse ...................................................................................................... Eingaben aus der Datei lesen ........................................................................................ Das Dokument im XML-Format ausgeben ............................................................... Der Dokumenttyp * .......................................................................................................... Elemente .............................................................................................................................. Zugriff auf Elementinhalte ............................................................................................ Liste mit Unterelementen erzeugen * ........................................................................ Neue Elemente einfügen und ändern ........................................................................ Attributinhalte lesen und ändern ............................................................................... XPath ..................................................................................................................................... 723 724 725 726 727 730 732 732 735 738 Transformationen mit XSLT * ..................................................................................................... 742 8.8.1 8.8.2 742 744 7.11 8.2 8.3 8.4 16 Die Standard Generalized Markup Language (SGML) ........................................... Extensible Markup Language (XML) ........................................................................... 8.7 Eigenschaften von XML-Dokumenten .................................................................................... 666 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 Elemente und Attribute .................................................................................................. Beschreibungssprache für den Aufbau von XML-Dokumenten ........................ Schema – die moderne Alternative zu DTD .............................................................. Namensraum (Namespace) ........................................................................................... XML-Applikationen * ........................................................................................................ 666 669 673 675 676 Die Java-APIs für XML ..................................................................................................................... 677 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 Das Document Object Model (DOM) .......................................................................... Simple API for XML Parsing (SAX) ................................................................................. Pull-API StAX ....................................................................................................................... Java Document Object Model (JDOM) ....................................................................... JAXP als Java-Schnittstelle zu XML .............................................................................. DOM-Bäume einlesen mit JAXP * ................................................................................. 678 678 678 678 679 680 Java Architecture for XML Binding (JAXB) ............................................................................. 680 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.4.6 8.4.7 680 681 682 684 686 690 697 Bean für JAXB aufbauen .................................................................................................. Utility-Klasse JAXB ............................................................................................................ Ganze Objektgraphen schreiben und lesen ............................................................. JAXBContext und Marshaller/Unmarshaller nutzen ............................................ Validierung .......................................................................................................................... Weitere JAXB-Annotationen * ....................................................................................... Beans aus XML-Schema-Datei generieren ................................................................ 8.6 8.8 8.9 Unterschiede der Verarbeitungsmodelle ................................................................. XML-Dateien mit dem Cursor-Verfahren lesen ...................................................... XML-Dateien mit dem Iterator-Verfahren verarbeiten * ..................................... Mit Filtern arbeiten * ........................................................................................................ XML-Dokumente schreiben ........................................................................................... Serielle Verarbeitung von XML mit SAX * ............................................................................. 716 8.6.1 8.6.2 8.6.3 8.6.4 716 717 718 720 Schnittstellen von SAX .................................................................................................... SAX-Parser erzeugen ........................................................................................................ Operationen der Schnittstelle ContentHandler ..................................................... ErrorHandler und EntityResolver ................................................................................. Templates und XPath als Kernelemente von XSLT ................................................ Umwandlung von XML-Dateien mit JDOM und JAXP .......................................... XML-Schema-Validierung * ......................................................................................................... 745 8.9.1 8.9.2 SchemaFactory und Schema ......................................................................................... Validator .............................................................................................................................. 745 745 8.9.3 Validierung unterschiedlicher Datenquellen durchführen ................................ 746 8.10 Zum Weiterlesen .............................................................................................................................. 747 9 Dateiformate 749 9.1 Einfache Dateiformate für strukturierte Daten ................................................................. 750 9.1.1 750 Property-Dateien mit java.util.Properties lesen und schreiben ........................ 17 Inhalt Inhalt 9.1.2 9.1.3 9.2 9.3 9.4 9.5 CSV-Dateien ........................................................................................................................ JSON-Serialisierung mit Jackson .................................................................................. 752 754 Dokumentenformate ...................................................................................................................... 755 9.2.1 9.2.2 (X)HTML ................................................................................................................................ PDF-Dokumente ................................................................................................................. 756 757 9.2.3 9.2.4 Microsoft Office-Dokumente ........................................................................................ OASIS Open Document Format .................................................................................... 757 759 10.4 Datenkompression * ........................................................................................................................ 759 10.5 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 Java-Unterstützung beim Komprimieren ................................................................. Daten packen und entpacken ....................................................................................... Datenströme komprimieren .......................................................................................... ZIP-Archive ........................................................................................................................... JAR-Archive .......................................................................................................................... 760 761 763 766 772 Bildformate ......................................................................................................................................... 772 Audiodateien ...................................................................................................................................... 773 9.5.1 9.5.2 9.5.3 9.5.4 773 773 774 776 Die Arbeit mit Applets AudioClip ................................................................................. AudioClip von JavaFX ....................................................................................................... MIDI-Dateien abspielen .................................................................................................. ID-Tags aus mp3-Dateien ............................................................................................... 10 Grafische Oberflächen mit Swing 777 10.1 AWT, JavaFoundation Classes und Swing ............................................................................. 777 10.1.1 10.1.2 10.1.3 777 778 781 10.2 10.3 18 10.3.5 10.3.6 10.3.7 10.3.8 10.3.9 Das Abstract Window Toolkit (AWT) .......................................................................... Java Foundation Classes (JFC) ....................................................................................... Was Swing von AWT-Komponenten unterscheidet .............................................. Mit NetBeans zur ersten Swing-Oberfläche ......................................................................... 782 10.2.1 10.2.2 Projekt anlegen .................................................................................................................. Eine GUI-Klasse hinzufügen .......................................................................................... 782 784 10.2.3 10.2.4 10.2.5 10.2.6 Programm starten ............................................................................................................. Grafische Oberfläche aufbauen ................................................................................... Swing-Komponenten-Klassen ...................................................................................... Funktionalität geben ........................................................................................................ 786 786 788 790 Aller Swing-Anfang – Fenster zur Welt .................................................................................. 793 10.3.1 10.3.2 10.3.3 10.3.4 793 794 795 795 Eine Uhr, bei der die Zeit nie vergeht .......................................................................... Swing-Fenster mit javax.swing.JFrame darstellen ................................................ Mit add(…) auf den Container ....................................................................................... Fenster schließbar machen – setDefaultCloseOperation(int) ........................... Sichtbarkeit des Fensters ............................................................................................... Größe und Position des Fensters verändern ............................................................ Fenster- und Dialogdekoration, Transparenz * ....................................................... Die Klasse Toolkit * ........................................................................................................... Zum Vergleich: AWT-Fenster darstellen * ................................................................ 796 796 797 798 799 Beschriftungen (JLabel) ................................................................................................................. 800 10.4.1 803 Mehrzeiliger Text, HTML in der Darstellung ............................................................ Icon und ImageIcon für Bilder auf Swing-Komponenten .............................................. 804 10.5.1 Die Klasse ImageIcon ....................................................................................................... 804 Es tut sich was – Ereignisse beim AWT ................................................................................... 806 10.6.1 10.6.2 10.6.3 10.6.4 10.6.5 10.6.6 10.6.7 Die Ereignisquellen und Horcher (Listener) von Swing ........................................ Listener implementieren ................................................................................................ Listener bei dem Ereignisauslöser anmelden/abmelden .................................... Adapterklassen nutzen ................................................................................................... Innere Mitgliedsklassen und innere anonyme Klassen ....................................... Aufrufen der Listener im AWT-Event-Thread .......................................................... Ereignisse, etwas genauer betrachtet * ..................................................................... 806 807 810 812 814 816 816 Schaltflächen ..................................................................................................................................... 819 10.7.1 10.7.2 Normale Schaltflächen (JButton) ................................................................................ Der aufmerksame ActionListener ................................................................................ 819 822 10.7.3 10.7.4 10.7.5 Schaltflächen-Ereignisse vom Typ ActionEvent ..................................................... Basisklasse AbstractButton ........................................................................................... Wechselknopf (JToggleButton) .................................................................................... 823 823 825 Textkomponenten ........................................................................................................................... 825 10.8.1 10.8.2 10.8.3 10.8.4 10.8.5 10.8.6 Text in einer Eingabezeile .............................................................................................. Die Oberklasse der Textkomponenten (JTextComponent) ................................ Geschützte Eingaben (JPasswordField) ..................................................................... Validierende Eingabefelder (JFormattedTextField) ............................................... Einfache mehrzeilige Textfelder (JTextArea) ........................................................... Editor-Klasse (JEditorPane) * ......................................................................................... 826 827 829 829 831 833 Swing Action * ................................................................................................................................... 836 10.10 JComponent und Component als Basis aller Komponenten ........................................ 838 10.6 10.7 10.8 10.9 10.10.1 10.10.2 10.10.3 10.10.4 10.10.5 10.10.6 10.10.7 Hinzufügen von Komponenten .................................................................................... Tooltips (Kurzhinweise) .................................................................................................. Rahmen (Border) * ............................................................................................................. Fokus und Navigation * ................................................................................................... Ereignisse jeder Komponente * .................................................................................... Die Größe und Position einer Komponente * .......................................................... Komponenten-Ereignisse * ............................................................................................ 838 839 840 842 844 847 848 19 Inhalt Inhalt 10.10.8 UI-Delegate – der wahre Zeichner * ............................................................................ 10.10.9 Undurchsichtige (opake) Komponente * ................................................................... 10.10.10Properties und Listener für Änderungen * ................................................................ 848 851 852 10.11 Container .............................................................................................................................................. 852 10.11.1 Standardcontainer (JPanel) ............................................................................................ 852 10.11.2 Bereich mit automatischen Rollbalken (JScrollPane) ............................................ 10.11.3 Reiter (JTabbedPane) ........................................................................................................ 10.11.4 Teilungskomponente (JSplitPane) ............................................................................... 853 853 855 10.12 Alles Auslegungssache – die Layoutmanager ..................................................................... 855 10.12.1 10.12.2 10.12.3 10.12.4 10.12.5 10.12.6 10.12.7 10.12.8 10.12.9 Übersicht über Layoutmanager .................................................................................... Zuweisen eines Layoutmanagers ................................................................................ Im Fluss mit FlowLayout ................................................................................................. BoxLayout ............................................................................................................................ Mit BorderLayout in alle Himmelsrichtungen ......................................................... Rasteranordnung mit GridLayout ................................................................................ Der GridBagLayoutmanager * ....................................................................................... Null-Layout * ....................................................................................................................... Weitere Layoutmanager ................................................................................................. 856 856 857 859 860 862 864 869 869 10.13 Rollbalken und Schieberegler ..................................................................................................... 870 10.13.1 Schieberegler (JSlider) ...................................................................................................... 10.13.2 Rollbalken (JScrollBar) * ................................................................................................... 870 871 10.14 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen ........................................................ 875 10.14.1 Kontrollfelder (JCheckBox) ............................................................................................. 10.14.2 ItemSelectable, ItemListener und das ItemEvent ................................................... 10.14.3 Sich gegenseitig ausschließende Optionen (JRadioButton) ............................... 876 878 879 10.15 Fortschritte bei Operationen überwachen * ......................................................................... 881 10.15.1 Fortschrittsbalken (JProgressBar) ................................................................................ 10.15.2 Dialog mit Fortschrittsanzeige (ProgressMonitor) ................................................ 881 883 10.16 Menüs und Symbolleisten ............................................................................................................ 883 10.16.1 Die Menüleisten und die Einträge ............................................................................... 884 10.16.2 10.16.3 10.16.4 10.16.5 10.16.6 10.16.7 10.16.8 10.16.9 885 887 888 888 890 891 894 898 20 Menüeinträge definieren ............................................................................................... Einträge durch Action-Objekte beschreiben ............................................................ Mit der Tastatur – Mnemonics und Shortcut .......................................................... Der Tastatur-Shortcut (Accelerator) ........................................................................... Tastenkürzel (Mnemonics) ............................................................................................. Symbolleisten alias Toolbars ......................................................................................... Popup-Menüs ..................................................................................................................... System-Tray nutzen * ....................................................................................................... 10.17 Das Model-View-Controller-Konzept ..................................................................................... 899 10.18 Auswahlmenüs, Listen und Spinner ........................................................................................ 901 10.18.1 10.18.2 10.18.3 10.18.4 Listen (JList) ......................................................................................................................... Auswahlmenü (JComboBox) ......................................................................................... Drehfeld (JSpinner) * ........................................................................................................ Datumsauswahl ................................................................................................................ 10.19 Tabellen (JTable) ............................................................................................................................... 10.19.1 10.19.2 10.19.3 10.19.4 10.19.5 10.19.6 901 908 913 914 915 Ein eigenes Tabellen-Model .......................................................................................... Basisklasse für eigene Modelle (AbstractTableModel) ........................................ Ein vorgefertigtes Standardmodell (DefaultTableModel) ................................... Ein eigener Renderer für Tabellen ............................................................................... Zell-Editoren ....................................................................................................................... Automatisches Sortieren und Filtern mit RowSorter * ......................................... 916 917 920 922 925 926 10.20 Bäume (JTree) .................................................................................................................................... 929 10.20.1 JTree und sein TreeModel und TreeNode ................................................................. 10.20.2 Selektionen bemerken .................................................................................................... 10.20.3 Das TreeModel von JTree * ............................................................................................. 929 931 931 10.21 JRootPane und JDesktopPane * ................................................................................................. 934 10.21.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane) ........................ 10.21.2 JDesktopPane und die Kinder von JInternalFrame ................................................ 934 935 10.21.3 JLayeredPane ...................................................................................................................... 937 10.22 Dialoge und Window-Objekte ................................................................................................... 937 10.22.1 JWindow und JDialog ...................................................................................................... 10.22.2 Modal oder nichtmodal? ................................................................................................ 938 938 10.22.3 Standarddialoge mit JOptionPane .............................................................................. 10.22.4 Der Dateiauswahldialog ................................................................................................. 10.22.5 Der Farbauswahldialog JColorChooser * ................................................................... 939 942 945 10.23 Flexibles Java-Look-and-Feel ...................................................................................................... 947 10.23.1 Look-and-Feel global setzen .......................................................................................... 10.23.2 UIManager .......................................................................................................................... 10.23.3 Die Windows-Optik mit JGoodies Looks verbessern * .......................................... 948 948 950 10.24 Swing-Komponenten neu erstellen oder verändern * .................................................... 951 10.24.1 Überlagerungen mit dem Swing-Komponenten-Dekorator JLayer ................. 952 10.25 Die Zwischenablage (Clipboard) ............................................................................................... 953 10.25.1 Clipboard-Objekte ............................................................................................................ 10.25.2 Mit Transferable auf den Inhalt zugreifen ............................................................... 10.25.3 DataFlavor ist das Format der Daten in der Zwischenablage ............................ 953 954 955 21 Inhalt Inhalt 10.25.4 Einfügungen in der Zwischenablage erkennen ...................................................... 10.25.5 Drag & Drop ........................................................................................................................ 957 957 10.26 Undo durchführen * ......................................................................................................................... 958 10.27 AWT, Swing und die Threads ...................................................................................................... 960 10.27.1 Ereignisschlange (EventQueue) und AWT-Event-Thread .................................... 960 10.27.2 10.27.3 10.27.4 10.27.5 10.27.6 Swing ist nicht threadsicher .......................................................................................... invokeLater(…) und invokeAndWait(…) ...................................................................... SwingWorker ...................................................................................................................... Eigene Ereignisse in die Queue setzen * .................................................................... Auf alle Ereignisse hören * .............................................................................................. 961 963 965 967 968 10.28 Barrierefreiheit mit der Java Accessibility API ..................................................................... 968 10.29 Zeitliches Ausführen mit dem javax.swing.Timer ............................................................. 969 10.30 Die Zusatzkomponentenbibliothek SwingX ........................................................................ 970 10.30.1 10.30.2 10.30.3 10.30.4 10.30.5 Im Angebot: Erweiterte und neue Swing-Komponenten .................................... Überblick über erweiterte Standard-Swing-Klassen ............................................. Neue Swing-Klassen ......................................................................................................... Weitere SwingX-Klassen ................................................................................................. SwingX-Installation .......................................................................................................... 970 971 972 973 973 10.31 Zum Weiterlesen .............................................................................................................................. 973 11 Grafikprogrammierung 975 11.1 Grundlegendes zum Zeichnen .................................................................................................... 975 11.1.1 11.1.2 11.1.3 11.1.4 11.1.5 Die paint(Graphics)-Methode für das AWT-Frame ................................................ Die ereignisorientierte Programmierung ändert Fensterinhalte ...................... Zeichnen von Inhalten auf ein JFrame ....................................................................... Auffordern zum Neuzeichnen mit repaint(…) ......................................................... Java 2D-API .......................................................................................................................... 975 977 978 979 980 Einfache Zeichenmethoden ......................................................................................................... 981 11.2.1 11.2.2 11.2.3 11.2.4 Linien ..................................................................................................................................... Rechtecke ............................................................................................................................. Ovale und Kreisbögen ...................................................................................................... Polygone und Polylines .................................................................................................... 981 981 982 983 Zeichenketten schreiben und Fonts ......................................................................................... 985 11.3.1 11.3.2 11.3.3 985 986 987 11.2 11.3 22 Zeichenfolgen schreiben ................................................................................................. Die Font-Klasse ................................................................................................................... Font-Metadaten durch FontMetrics * ......................................................................... 11.4 11.5 11.6 Geometrische Objekte ................................................................................................................... 990 11.4.1 11.4.2 Die Schnittstelle Shape ................................................................................................... Pfade * ................................................................................................................................... 991 993 Das Innere und Äußere einer Form .......................................................................................... 993 11.5.1 11.5.2 11.5.3 11.5.4 994 994 995 995 Bilder ...................................................................................................................................................... 1000 11.6.1 11.6.2 11.6.3 11.6.4 11.6.5 11.6.6 11.6.7 11.7 11.8 Eine Übersicht über die Bilder-Bibliotheken ............................................................ Bilder mit ImageIO lesen ................................................................................................ Ein Bild zeichnen ............................................................................................................... Splash-Screen * .................................................................................................................. Bilder skalieren * ................................................................................................................ Schreiben mit ImageIO ................................................................................................... Asynchrones Laden mit getImage(…) und dem MediaTracker * ........................ 1000 1000 1002 1005 1005 1008 1012 Weitere Eigenschaften von Graphics * ................................................................................... 1013 11.7.1 11.7.2 Eine Kopie von Graphics erstellen ............................................................................... 1013 Koordinatensystem verschieben ................................................................................. 1014 11.7.3 11.7.4 11.7.5 Beschnitt (Clipping) .......................................................................................................... 1015 Zeichenhinweise durch RenderingHints ................................................................... 1018 Transformationen mit einem AffineTransform-Objekt ....................................... 1019 Drucken * .............................................................................................................................................. 1021 11.8.1 11.8.2 11.9 Farben und die Paint-Schnittstelle .............................................................................. Farben mit der Klasse Color ........................................................................................... Composite und XOR * ...................................................................................................... Dicke und Art der Linien von Formen bestimmen über Stroke * ....................... Drucken der Inhalte .......................................................................................................... 1021 Bekannte Drucker ............................................................................................................. 1023 Benutzerinteraktionen automatisieren, Robot und Screenshots * ........................... 1024 11.9.1 11.9.2 11.9.3 11.9.4 11.9.5 11.9.6 11.9.7 Der Roboter ......................................................................................................................... Automatisch in die Tasten hauen ............................................................................... Automatisierte Maus-Operationen ............................................................................ Methoden zur Zeitsteuerung ........................................................................................ Bildschirmabzüge (Screenshots) .................................................................................. Funktionsweise und Beschränkungen ....................................................................... MouseInfo und PointerInfo ........................................................................................... 1024 1025 1025 1026 1026 1028 1028 11.10 Zum Weiterlesen .............................................................................................................................. 1030 23 Inhalt Inhalt 12 JavaFX 1031 12.14 Zum Weiterlesen .............................................................................................................................. 1075 12.1 Das erste Programm mit JavaFX ................................................................................................ 1031 12.2 Zentrale Typen in JavaFX .............................................................................................................. 1034 12.2.1 12.2.2 12.3 Szenegraph-Knoten und Container-Typen ............................................................... 1034 Datenstrukturen ................................................................................................................ 1035 JavaFX-Komponenten und Layout-Container-Klassen ................................................... 1036 12.3.1 12.3.2 12.3.3 Überblick über die Komponenten ................................................................................ 1036 Listener/Handler zur Ereignisbeobachtung ............................................................. 1037 Panels mit speziellen Layouts ....................................................................................... 1038 12.4 Webbrowser ....................................................................................................................................... 1040 12.5 Geometrische Objekte ................................................................................................................... 1041 12.6 12.5.1 12.5.2 Linien und Rechtecke ....................................................................................................... 1042 Kreise, Ellipsen, Kreisförmiges ...................................................................................... 1044 12.5.3 12.5.4 12.5.5 12.5.6 12.5.7 Es werde kurvig – quadratische und kubische Splines ......................................... Pfade * ................................................................................................................................... Polygone und Polylines .................................................................................................... Beschriftungen, Texte, Fonts ......................................................................................... Die Oberklasse Shape ....................................................................................................... 1045 1047 1050 1050 1052 13 Netzwerkprogrammierung Grundlegende Begriffe .................................................................................................................. 1077 13.2 URI und URL ........................................................................................................................................ 1078 13.2.1 13.2.2 13.2.3 13.2.4 13.3 13.4 Farben mit der Klasse Color ........................................................................................... 1054 Grafiken ................................................................................................................................................ 1057 12.7.1 12.7.2 Klasse Image ....................................................................................................................... 1058 ImageView ........................................................................................................................... 1058 12.7.3 12.7.4 Programm-Icon/Fenster-Icon setzen .......................................................................... 1059 Zugriff auf die Pixel und neue Pixel-Bilder * ............................................................. 1060 12.8 Deklarative Oberflächen mit FXML .......................................................................................... 1062 12.9 Diagramme (Charts) ........................................................................................................................ 1065 12.9.1 12.9.2 13.5 13.6 12.10 Animationen ....................................................................................................................................... 1068 12.10.1 FadeTransition .................................................................................................................... 1069 12.10.2 ScaleTransition ................................................................................................................... 1070 12.10.3 Transitionen parallel oder sequenziell durchführen ............................................. 1070 12.12 Das Geometry-Paket * .................................................................................................................... 1072 24 13.7 Die Klasse URI ..................................................................................................................... Die Klasse URL .................................................................................................................... Informationen über eine URL * ..................................................................................... Der Zugriff auf die Daten über die Klasse URL ........................................................ 1079 1079 1081 1083 Die Klasse URLConnection * ......................................................................................................... 1084 13.3.1 13.3.2 Methoden und Anwendung von URLConnection .................................................. 1084 Protokoll- und Content-Handler .................................................................................. 1087 13.3.3 13.3.4 13.3.5 Im Detail: Von der URL zur URLConnection ............................................................. 1088 Der Protokoll-Handler für JAR-Dateien ...................................................................... 1089 Basic Authentication und Proxy-Authentifizierung .............................................. 1090 Mit GET und POST Daten übergeben * .................................................................................... 1092 13.4.1 13.4.2 Kodieren der Parameter für Serverprogramme ...................................................... 1092 In Wikipedia suchen und mit GET-Request absenden ......................................... 1093 13.4.3 POST-Request absenden ................................................................................................. 1094 Host- und IP-Adressen ................................................................................................................... 1095 13.5.1 13.5.2 13.5.3 13.5.4 Kuchendiagramm .............................................................................................................. 1065 Balkendiagramm ............................................................................................................... 1067 12.11 Medien abspielen ............................................................................................................................. 1071 1077 13.1 Füllart von Formen ........................................................................................................................... 1054 12.6.1 12.7 12.13 JavaFX-Scene in Swing-Applikationen einbetten ............................................................. 1073 Lebt der Rechner? .............................................................................................................. IP-Adresse des lokalen Hosts ......................................................................................... Das Netz ist klasse * ......................................................................................................... NetworkInterface .............................................................................................................. 1097 1098 1099 1099 Mit dem Socket zum Server ......................................................................................................... 1100 13.6.1 13.6.2 Das Netzwerk ist der Computer ................................................................................... 1100 Sockets .................................................................................................................................. 1101 13.6.3 13.6.4 13.6.5 13.6.6 13.6.7 Eine Verbindung zum Server aufbauen ..................................................................... Server unter Spannung – die Ströme ......................................................................... Die Verbindung wieder abbauen ................................................................................. Informationen über den Socket * ................................................................................ Reine Verbindungsdaten über SocketAddress * ..................................................... 1101 1103 1103 1104 1106 Client-Server-Kommunikation ................................................................................................... 1107 13.7.1 13.7.2 13.7.3 Warten auf Verbindungen ............................................................................................. 1107 Ein Multiplikationsserver ............................................................................................... 1108 Blockierendes Lesen ......................................................................................................... 1111 25 Inhalt Inhalt 13.8 Apache HttpComponents und Commons Net * .................................................................. 1112 13.8.1 13.8.2 13.9 14.2 HttpComponents .............................................................................................................. 1113 Apache Commons Net ..................................................................................................... 1113 14.2.1 14.2.2 14.2.3 14.2.4 14.2.5 14.2.6 Arbeitsweise eines Webservers * .............................................................................................. 1114 13.9.1 13.9.2 13.9.3 13.9.4 Das Hypertext Transfer Protocol (HTTP) .................................................................... Anfragen an den Server ................................................................................................... Die Antworten vom Server ............................................................................................. Webserver mit com.sun.net.httpserver.HttpServer .............................................. 1114 1115 1116 1120 14.3 13.10.1 System-Properties ............................................................................................................. 1122 13.10.2 Verbindungen durch die Proxy-API ............................................................................. 1123 13.11 Datagram-Sockets * ......................................................................................................................... 1124 13.11.1 Die Klasse DatagramSocket ........................................................................................... 1126 13.11.2 Datagramme und die Klasse DatagramPacket ....................................................... 1126 Auf ein hereinkommendes Paket warten ................................................................. Ein Paket zum Senden vorbereiten .............................................................................. Methoden der Klasse DatagramPacket ..................................................................... Das Paket senden .............................................................................................................. 1127 1128 1128 1129 14.3.6 14.3.7 14.4 14.5 13.12.1 Wie eine Elektropost um die Welt geht ..................................................................... 1131 13.12.2 Das Simple Mail Transfer Protocol und RFC 822 ..................................................... 1131 13.12.3 13.12.4 13.12.5 13.12.6 13.12.7 13.12.8 POP (Post Office Protocol) ............................................................................................... Die JavaMail API ................................................................................................................. E-Mails mittels POP3 abrufen ....................................................................................... Multipart-Nachrichten verarbeiten ............................................................................ E-Mails versenden ............................................................................................................. Ereignisse und Suchen ..................................................................................................... 1132 1132 1134 1136 1138 1141 13.13 Tiefer liegende Netzwerkeigenschaften * ............................................................................. 1142 13.13.1 MAC-Adressen auslesen .................................................................................................. 1142 13.13.2 Internet Control Message Protocol (ICMP) ............................................................... 1143 13.14 Zum Weiterlesen .............................................................................................................................. 1143 14 Verteilte Programmierung mit RMI 14.1 Entfernte Objekte und Methoden ............................................................................................ 1145 14.1.1 14.1.2 26 1145 Stellvertreter helfen bei entfernten Methodenaufrufen ..................................... 1145 Standards für entfernte Objekte .................................................................................. 1147 14.6 1147 1148 1148 1150 1150 1151 Entfernte Schnittstelle deklarieren ............................................................................. Remote-Objekt-Implementierung .............................................................................. Stellvertreterobjekte ........................................................................................................ Der Namensdienst (Registry) ........................................................................................ Remote-Objekt-Implementierung exportieren und beim Namensdienst anmelden ............................................................................................... Einfaches Logging ............................................................................................................. Aufräumen mit dem DGC * ............................................................................................ 1151 1152 1153 1153 1155 1157 1158 Auf der Client-Seite ......................................................................................................................... 1159 Entfernte Objekte übergeben und laden .............................................................................. 1160 14.5.1 13.12 E-Mail * .................................................................................................................................................. 1131 Zusammenspiel von Server, Registry und Client .................................................... Wie die Stellvertreter die Daten übertragen ........................................................... Probleme mit entfernten Methoden .......................................................................... Nutzen von RMI bei Middleware-Lösungen ............................................................. Zentrale Klassen und Schnittstellen ........................................................................... Entfernte und lokale Objekte im Vergleich .............................................................. Auf der Serverseite .......................................................................................................................... 1151 14.3.1 14.3.2 14.3.3 14.3.4 14.3.5 13.10 Verbindungen durch einen Proxy-Server * ........................................................................... 1122 13.11.3 13.11.4 13.11.5 13.11.6 Java Remote Method Invocation .............................................................................................. 1147 Klassen vom RMI-Klassenlader nachladen ............................................................... 1160 Weitere Eigenschaften von RMI ................................................................................................ 1161 14.6.1 14.6.2 RMI und CORBA ................................................................................................................. 1161 RMI über HTTP getunnelt ............................................................................................... 1161 14.6.3 Automatische Remote-Objekt-Aktivierung ............................................................. 1162 14.7 Java Message Service (JMS) ......................................................................................................... 1163 14.8 Zum Weiterlesen .............................................................................................................................. 1163 15 RESTful und SOAP-Web-Services 1165 15.1 Web-Services ...................................................................................................................................... 1165 15.2 RESTful Web-Services ..................................................................................................................... 1166 15.2.1 15.2.2 15.2.3 15.2.4 15.2.5 15.2.6 15.2.7 Aus Prinzip REST ................................................................................................................ Jersey ..................................................................................................................................... JAX-RS-Annotationen für den ersten REST-Service ............................................... Test-Server starten ........................................................................................................... REST-Services konsumieren ........................................................................................... Content-Handler, Marshaller und verschiedene MIME-Typen .......................... REST-Parameter ................................................................................................................. 1166 1168 1169 1169 1170 1171 1174 27 Inhalt Inhalt 15.2.8 REST-Services mit Parametern über die Jersey-Client-API aufrufen ................ 1176 15.2.9 PUT-Anforderungen und das Senden von Daten ................................................... 1177 15.2.10 PUT/POST/DELETE-Sendungen mit der Jersey-Client-API absetzen ................ 1177 15.3 15.4 Daily Soap und das SOAP-Protokoll ......................................................................................... 1177 15.3.1 Die technische Realisierung ........................................................................................... 1178 15.3.2 15.3.3 15.3.4 15.3.5 15.3.6 Web-Service-APIs und Implementierungen ............................................................. @WebService ...................................................................................................................... Einen Web-Service definieren ....................................................................................... Web-Services veröffentlichen ....................................................................................... Einen JAX-WS-Client implementieren ........................................................................ Arbeiten mit dem ServiceLoader .................................................................................. 1198 Die Utility-Klasse Lookup als ServiceLoader-Fassade ............................................ 1199 Contexts and Dependency Injection (CDI) aus dem JSR-299 .............................. 1200 17.4 Metadaten durch Javadoc-Tags ................................................................................... 1203 An ein Class-Objekt kommen ........................................................................................ 1204 Eine Class ist ein Type ...................................................................................................... 1206 Klassenlader ........................................................................................................................................ 1207 17.3.1 17.3.2 Das Verzeichnis jre/lib/endorsed * .............................................................................. 1207 Die Klasse java.lang.ClassLoader .................................................................................. 1208 17.3.3 Hot Deployment mit dem URL-Classloader * ........................................................... 1209 Metadaten der Typen mit dem Class-Objekt ....................................................................... 1212 Der Name des Typs ........................................................................................................... 1212 Was das Class-Objekt beschreibt * .............................................................................. 1215 17.8 Reflections – Gespür für die Attribute einer Klasse .............................................. Schnittstelle Member für Eigenschaften .................................................................. Field-Klasse ......................................................................................................................... Methoden einer Klasse erfragen ................................................................................. Properties einer Bean erfragen ..................................................................................... Konstruktoren einer Klasse ............................................................................................ Annotationen ..................................................................................................................... 1224 1225 1226 1227 1230 1231 1232 Objekte erzeugen .............................................................................................................. Die Belegung der Variablen erfragen ......................................................................... Eine generische eigene toString()-Methode * ......................................................... Variablen setzen ................................................................................................................ Bean-Zustände kopieren * .............................................................................................. Private Attribute ändern ................................................................................................. Methoden aufrufen .......................................................................................................... Statische Methoden aufrufen ...................................................................................... Dynamische Methodenaufrufe bei festen Methoden beschleunigen * ......... java.lang.reflect.Parameter ........................................................................................... 1232 1234 1236 1238 1240 1240 1241 1243 1243 1245 Eigene Annotationstypen * .......................................................................................................... 1247 17.7.1 17.7.2 17.7.3 17.7.4 17.7.5 17.7.6 17.7.7 17.7.8 17.7.9 17.7.10 17.7.11 17.7.12 17.7.13 Metadaten der Typen mit dem Class-Objekt ....................................................................... 1204 17.4.1 17.4.2 28 17.7 Metadaten ........................................................................................................................................... 1203 17.2.1 17.2.2 17.3 1203 1217 1218 1219 1219 1221 Objekte erzeugen und manipulieren ...................................................................................... 1232 17.6.1 17.6.2 17.6.3 17.6.4 17.6.5 17.6.6 17.6.7 17.6.8 17.6.9 17.6.10 Zum Weiterlesen .............................................................................................................................. 1202 17.1.1 17.2 17.6 Technische Abhängigkeiten und POJOs .................................................................... 1195 17 Typen, Reflection und Annotationen 17.1 1185 instanceof mit Class-Objekten * .................................................................................. Oberklassen finden * ........................................................................................................ Implementierte Interfaces einer Klasse oder eines Interfaces * ....................... Modifizierer und die Klasse Modifier * ...................................................................... Die Arbeit auf dem Feld * ............................................................................................... Attribute, Methoden und Konstruktoren ............................................................................. 1222 17.5.1 17.5.2 17.5.3 17.5.4 17.5.5 17.5.6 17.5.7 Wie eine Implementierung an die richtige Stelle kommt .............................................. 1197 16.2.1 16.2.2 16.2.3 16.3 17.5 Property-Validierung durch Bean Validation ...................................................................... 1185 16.1.1 16.2 1179 1179 1180 1181 1181 Zum Weiterlesen .............................................................................................................................. 1183 16 Technologien für die Infrastruktur 16.1 17.4.3 17.4.4 17.4.5 17.4.6 17.4.7 Annotationen zum Laden von Ressourcen ............................................................... Neue Annotationen deklarieren .................................................................................. Annotationen mit genau einem Attribut ................................................................. Element-Wert-Paare (Attribute) hinzufügen .......................................................... Annotationsattribute vom Typ einer Aufzählung ................................................. Felder von Annotationsattributen .............................................................................. Vorbelegte Attribute ........................................................................................................ Annotieren von Annotationstypen ............................................................................. Deklarationen für unsere Ressourcen-Annotationen ........................................... Annotierte Elemente auslesen ..................................................................................... Auf die Annotationsattribute zugreifen ................................................................... Komplettbeispiel zum Initialisieren von Ressourcen ............................................ Mögliche Nachteile von Annotationen ..................................................................... 1247 1248 1248 1249 1250 1251 1252 1253 1259 1260 1262 1263 1266 Zum Weiterlesen .............................................................................................................................. 1267 29 Inhalt Inhalt 18 Dynamische Übersetzung und Skriptsprachen 18.1 18.4 Generierung von Java-Quellcode ................................................................................. 1271 Codetransformationen .................................................................................................... 1273 Erstellen von Java-Bytecode ........................................................................................... 1273 Java Compiler API .............................................................................................................. Fehlerdiagnose ................................................................................................................... Eine im String angegebene Kompilationseinheit übersetzen ............................ Wenn Quelle und Ziel der Speicher sind .................................................................... 1274 1276 1279 1280 18.3.1 18.3.2 Java-Programme mit JavaScript schreiben ............................................................... 1284 Kommandozeilenprogramme jrunscript und jjs .................................................... 1284 18.3.3 18.3.4 18.3.5 18.3.6 javax.script-API ................................................................................................................... JavaScript-Programme ausführen ............................................................................... Alternative Sprachen für die JVM ................................................................................ Von den Schwierigkeiten, dynamische Programmiersprachen auf die JVM zu bringen * ......................................................................................................... 1285 1285 1286 20.1 1309 1310 1311 1311 Zum Weiterlesen .............................................................................................................................. 1313 20.2 Logging mit Java ............................................................................................................................... 1293 19.1.1 19.1.2 19.1.3 19.1.4 Logging-APIs ........................................................................................................................ Logging mit java.util.logging ......................................................................................... Logging mit log4j * ............................................................................................................ Die Simple Logging Facade ............................................................................................ 1293 1294 1300 1303 19.1.5 Aktuelle Entwicklungen der Java-Logging-APIs ...................................................... 1303 MBean-Typen, MBean-Server und weitere Begriffe ......................................................... 1304 19.3.1 20.4 20.5 Geschwätzige Programme und JConsole ............................................................................... 1306 19.4.1 JConsole ................................................................................................................................ 1307 Der MBeanServer .............................................................................................................................. 1308 20.6 1315 1315 1316 1317 20.2.1 20.2.2 Der Sicherheitsmanager bei Applets .......................................................................... 1318 Sicherheitsmanager aktivieren .................................................................................... 1319 20.2.3 20.2.4 20.2.5 Rechte durch Policy-Dateien vergeben ...................................................................... 1321 Erstellen von Rechtedateien mit dem grafischen Policy-Tool ........................... 1323 Kritik an den Policies ........................................................................................................ 1324 Signierung ........................................................................................................................................... 1326 Warum signieren? ............................................................................................................ Digitale Ausweise und die Zertifizierungsstelle ..................................................... Mit keytool Schlüssel erzeugen .................................................................................... Signieren mit jarsigner .................................................................................................... 1326 1326 1327 1328 Kryptografische Hashfunktion .................................................................................................. 1328 20.4.1 20.4.2 Die MDx-Reihe ................................................................................................................... 1329 Secure Hash Algorithm (SHA) ....................................................................................... 1329 20.4.3 20.4.4 Mit der Security-API einen Fingerabdruck berechnen .......................................... 1330 Die Klasse MessageDigest ............................................................................................. 1330 Verschlüsseln von Daten(-strömen) * ..................................................................................... 1333 20.5.1 20.5.2 20.5.3 MXBeans des Systems ..................................................................................................... 1305 Sichere Java Virtual Machine ........................................................................................ Der Sandkasten (Sandbox) ............................................................................................. Security-API der Java SE .................................................................................................. Cryptographic Service Providers .................................................................................. Sicherheitsmanager (Security-Manager) .............................................................................. 1318 20.3.1 20.3.2 20.3.3 20.3.4 1293 1315 Zentrale Elemente der Java-Sicherheit .................................................................................. 1315 20.1.1 20.1.2 20.1.3 20.1.4 20.3 19.3 30 Management-Schnittstelle ........................................................................................... Implementierung der Managed-Ressource ............................................................. Anmeldung beim Server ................................................................................................. Eine eigene Bean in JConsole einbringen ................................................................. 20 Sicherheitskonzepte Zum Weiterlesen .............................................................................................................................. 1292 Systemzustände überwachen ..................................................................................................... 1303 19.5 19.7 1288 19.2 19.4 19.6.1 19.6.2 19.6.3 19.6.4 Ausführen von Skripten ................................................................................................................. 1283 19 Logging und Monitoring 19.1 Eine eigene Standard-MBean ..................................................................................................... 1309 Programme mit der Java Compiler API übersetzen .......................................................... 1274 18.2.1 18.2.2 18.2.3 18.2.4 18.3 19.6 Codegenerierung .............................................................................................................................. 1270 18.1.1 18.1.2 18.1.3 18.2 1269 Den Schlüssel, bitte .......................................................................................................... 1333 Verschlüsseln mit Cipher ................................................................................................ 1334 Verschlüsseln von Datenströmen ............................................................................... 1335 Zum Weiterlesen .............................................................................................................................. 1336 31 Inhalt Inhalt 21 Datenbankmanagement mit JDBC 21.1 Relationale Datenbanken ............................................................................................................. 1337 21.1.1 21.2 21.6 21.7 21.8 21.11 Transaktionen .................................................................................................................................... 1377 21.12 Vorbereitete Datenbankverbindungen ................................................................................. 1378 21.12.1 DataSource .......................................................................................................................... 1378 21.12.2 Gepoolte Datenbankverbindungen ............................................................................ 1381 21.13 Zum Weiterlesen .............................................................................................................................. 1382 22 Java Native Interface (JNI) Java Native Interface und Invocation-API ............................................................................. 1383 Eine C-Funktion in ein Java-Programm einbinden ............................................................ 1384 Der Treiber-Manager * ..................................................................................................... 1348 Den Treiber laden .............................................................................................................. 1349 22.2 21.5.3 21.5.4 21.5.5 Eine Aufzählung aller Treiber * ..................................................................................... 1350 Log-Informationen * ......................................................................................................... 1351 Verbindung zur Datenbank auf- und abbauen ....................................................... 1351 22.3 22.2.1 Abfragen über das Statement-Objekt ........................................................................ 1354 Ergebnisse einer Abfrage in ResultSet ........................................................................ 1357 21.6.3 21.6.4 21.6.5 21.6.6 21.6.7 Java und SQL-Datentypen .............................................................................................. Date, Time und Timestamp ........................................................................................... Unicode in der Spalte korrekt auslesen ..................................................................... Eine SQL-NULL und wasNull() bei ResultSet ............................................................. Wie viele Zeilen hat ein ResultSet? * ........................................................................... 1358 1361 1363 1363 1364 Elemente einer Datenbank ändern .......................................................................................... 1364 21.7.1 21.7.2 Einzelne INSERT-, UPDATE- oder DELETE-Anweisungen senden ....................... 1364 Aktualisierbares ResultSet .............................................................................................. 1365 21.7.3 Batch-Updates .................................................................................................................... 1366 Den Java-Code schreiben ............................................................................................... 1384 Dynamische Bibliotheken erzeugen ........................................................................................ 1385 22.3.1 22.3.2 22.3.3 Datenbankabfragen ........................................................................................................................ 1354 21.6.1 21.6.2 1383 22.1 21.5.1 21.5.2 Die Header-Datei erzeugen ........................................................................................... 1386 Implementierung der Funktion in C ........................................................................... 1387 Die C-Programme übersetzen und die dynamische Bibliothek erzeugen ..... 1388 22.4 Nativ die String-Länge ermitteln .............................................................................................. 1390 22.5 Erweiterte JNI-Eigenschaften ..................................................................................................... 1392 22.6 22.5.1 22.5.2 Klassendefinitionen ......................................................................................................... 1392 Zugriff auf Attribute ........................................................................................................ 1392 22.5.3 22.5.4 22.5.5 Methoden aufrufen .......................................................................................................... 1395 Threads und Synchronisation ....................................................................................... 1396 @Native Markierungen * ............................................................................................... 1396 Einfache Anbindung von existierenden Bibliotheken ..................................................... 1397 22.6.1 22.6.2 22.6.3 22.6.4 Die Ausnahmen bei JDBC, SQLException und Unterklassen ......................................... 1367 JNA (Java Native Access) ................................................................................................. BridJ ....................................................................................................................................... Generieren von JNI-Wrappern aus C++-Klassen und C-Headern ..................... COM-Schnittstellen anzapfen ...................................................................................... 1397 1397 1398 1398 JDBC-Fehlerbasisklasse SQLException ....................................................................... 1367 SQLWarning ........................................................................................................................ 1368 22.7 Invocation-API ................................................................................................................................... 1398 ResultSet und RowSet * ................................................................................................................. 1370 22.8 Zum Weiterlesen .............................................................................................................................. 1399 21.9.1 21.9.2 32 Schritte zur Datenbankabfrage .................................................................................... 1346 Ein Client für die HSQLDB-Datenbank ........................................................................ 1346 Mit Java an eine Datenbank andocken .................................................................................. 1348 21.8.1 21.8.2 21.9 Treibertypen * ..................................................................................................................... 1344 JDBC-Versionen * ............................................................................................................... 1345 Eine Beispielabfrage ........................................................................................................................ 1346 21.4.1 21.4.2 21.5 21.10.1 PreparedStatement-Objekte vorbereiten ................................................................. 1375 21.10.2 Werte für die Platzhalter eines PreparedStatement ............................................. 1376 JDBC und Datenbanktreiber ........................................................................................................ 1343 21.3.1 21.3.2 21.4 HSQLDB ................................................................................................................................. 1338 Weitere Datenbanken * ................................................................................................... 1340 Eclipse Data Tools Platform (DTP) zum Durchschauen von Datenbanken .... 1341 Der Typ CachedRowSet ................................................................................................... 1371 Der Typ WebRowSet ........................................................................................................ 1372 21.10 Vorbereitete Anweisungen (Prepared Statements) ......................................................... 1375 Das relationale Modell ..................................................................................................... 1337 Datenbanken und Tools ................................................................................................................ 1338 21.2.1 21.2.2 21.2.3 21.3 21.9.3 21.9.4 1337 Die Schnittstelle RowSet ................................................................................................. 1370 Implementierungen von RowSet ................................................................................. 1370 33 Inhalt 23 Dienstprogramme für die Java-Umgebung 1401 23.1 Programme des JDK ......................................................................................................................... 1401 23.2 Monitoringprogramme vom JDK .............................................................................................. 1401 23.2.1 23.2.2 23.2.3 23.2.4 23.2.5 23.2.6 23.3 23.4 23.3.1 23.3.2 Java-Tools in Java implementiert ................................................................................. 1411 Tools aus eigenen Java-Programmen ansprechen ................................................. 1411 23.3.3 23.3.4 23.3.5 API-Dokumentation der Tools ....................................................................................... 1412 Eigene Doclets .................................................................................................................... 1412 Auf den Compiler-AST einer Klasse zugreifen ......................................................... 1414 Ant ........................................................................................................................................................... 1416 1416 1417 1418 1418 1419 1420 Der Diassembler javap * .................................................................................................. 1422 Decompiler .......................................................................................................................... 1426 Obfuscatoren ...................................................................................................................... 1428 Weitere Dienstprogramme .......................................................................................................... 1430 23.6.1 23.6.2 23.7 Bezug und Installation von Ant .................................................................................... Das Build-Skript build.xml .............................................................................................. Build den Build ................................................................................................................... Properties ............................................................................................................................. Externe und vordefinierte Properties ......................................................................... Weitere Ant-Tasks ............................................................................................................. Disassembler, Decompiler und Obfuscator .......................................................................... 1421 23.5.1 23.5.2 23.5.3 23.6 1401 1402 1402 1403 1404 1406 Programmieren mit der Tools-API ............................................................................................ 1411 23.4.1 23.4.2 23.4.3 23.4.4 23.4.5 23.4.6 23.5 jps ........................................................................................................................................... jstat ........................................................................................................................................ jmap ....................................................................................................................................... jstack ...................................................................................................................................... jcmd ....................................................................................................................................... VisualVM .............................................................................................................................. Sourcecode Beautifier ...................................................................................................... 1430 Java-Programme als Systemdienst ausführen ........................................................ 1431 Zum Weiterlesen .............................................................................................................................. 1431 Index ..................................................................................................................................................................... 1433 34