104
Auf einen Blick Vorwort ......................................................................... 11 1 Grundlagen .................................................................... 19 2 Entwicklungsumgebungen ............................................. 73 3 Grafische Benutzungsoberflächen (GUI) ........................ 117 4 Ausführbare Programme ................................................ 173 5 Portable Programmierung .............................................. 285 6 Mac OS X-spezielle Programmierung ............................. 307 7 Grafik und Multimedia .................................................. 351 8 Werkzeuge ..................................................................... 383 9 Datenbanken und JDBC ................................................ 421 10 Servlets und JavaServer Pages (JSP) .............................. 443 11 J2EE und Enterprise JavaBeans (EJB) ............................. 461 12 J2ME und MIDP ............................................................ 481 A Kurzeinführung in die Programmiersprache Java ........... 509 B Java auf Mac OS 8/9/Classic .......................................... 531 C Java 1.5 »Tiger« .............................................................. 541 D System-Properties ......................................................... 547 E VM-Optionen ................................................................ 565 F Xcode- und Project Builder-Einstellungen ..................... 577 G Mac OS X- und Java-Versionen ...................................... 585 H Glossar ........................................................................... 589 I Die Buch-CD .................................................................. 595 Index .............................................................................. 597

Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Auf einen Blick

Vorwort ......................................................................... 11

1 Grundlagen .................................................................... 19

2 Entwicklungsumgebungen ............................................. 73

3 Grafische Benutzungsoberflächen (GUI) ........................ 117

4 Ausführbare Programme ................................................ 173

5 Portable Programmierung .............................................. 285

6 Mac OS X-spezielle Programmierung ............................. 307

7 Grafik und Multimedia .................................................. 351

8 Werkzeuge ..................................................................... 383

9 Datenbanken und JDBC ................................................ 421

10 Servlets und JavaServer Pages (JSP) .............................. 443

11 J2EE und Enterprise JavaBeans (EJB) ............................. 461

12 J2ME und MIDP ............................................................ 481

A Kurzeinführung in die Programmiersprache Java ........... 509

B Java auf Mac OS 8/9/Classic .......................................... 531

C Java 1.5 »Tiger« .............................................................. 541

D System-Properties ......................................................... 547

E VM-Optionen ................................................................ 565

F Xcode- und Project Builder-Einstellungen ..................... 577

G Mac OS X- und Java-Versionen ...................................... 585

H Glossar ........................................................................... 589

I Die Buch-CD .................................................................. 595

Index .............................................................................. 597

Page 2: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

5Inhalt

Inhalt

Vorwort 11

1 Grundlagen 19

1.1 Historisches ....................................................................................................... 22

1.2 Aktuelles ............................................................................................................ 24

1.3 Den Mac richtig bedienen .............................................................................. 25

1.4 Eingeben, übersetzen, ausführen .................................................................. 35

1.5 Entwicklerwerkzeuge und -dokumentation ................................................ 42

1.6 Up to date bleiben ........................................................................................... 44

1.7 Mac OS X erkennen ......................................................................................... 47

1.8 Konfigurationsdateien speichern .................................................................. 52

1.9 Aufbau des Apple-Java-Systems .................................................................... 551.9.1 Java-Struktur anderer Systeme ........................................................ 571.9.2 Java-Struktur von Mac OS X ............................................................ 60

1.10 Kleine Fallen ...................................................................................................... 69

1.11 Literatur & Links ............................................................................................... 70

2 Entwicklungsumgebungen 73

2.1 Project Builder und Xcode .............................................................................. 762.1.1 Projekttypen ....................................................................................... 762.1.2 Projektstruktur ................................................................................... 792.1.3 Eingeben und übersetzen ................................................................. 822.1.4 Ausführen und debuggen ................................................................. 872.1.5 Build-System ...................................................................................... 902.1.6 Versionsverwaltung ........................................................................... 94

2.2 Eclipse ................................................................................................................ 98

2.3 NetBeans und Sun Java Studio Creator ....................................................... 103

2.4 IntelliJ IDEA ...................................................................................................... 105

2.5 OmniCore CodeGuide ..................................................................................... 106

2.6 Borland JBuilder ............................................................................................... 107

2.7 Borland Together Control Center und Together Solo ................................ 108

2.8 Oracle JDeveloper ............................................................................................ 108

2.9 Metrowerks CodeWarrior ............................................................................... 110

Page 3: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Inhalt6

2.10 jEdit .................................................................................................................... 111

2.11 Jext ...................................................................................................................... 112

2.12 JJEdit ................................................................................................................... 113

2.13 BlueJ ................................................................................................................... 113

2.14 DrJava ................................................................................................................. 115

2.15 Literatur & Links ............................................................................................... 116

3 Grafische Benutzungsoberflächen (GUI) 117

3.1 Das AWT und die Java 1.3-Apple-Erweiterungen ...................................... 1213.1.1 Eine einfache AWT-Anwendung ...................................................... 1223.1.2 Fensterhintergrund ............................................................................ 1343.1.3 Kontext-Popup-Menüs ..................................................................... 1353.1.4 Dateiauswahl-Dialoge ....................................................................... 1363.1.5 Portables Einbinden der Java 1.3-Apple-Erweiterungen .............. 139

3.2 Swing und die Java 1.4-Apple-Erweiterungen ............................................ 1423.2.1 Konfiguration des Aussehens (Look & Feel) ................................... 1443.2.2 Ein Swing-Beispiel mit mehreren Dokument-Fenstern ................ 1463.2.3 Portables Einbinden der Java 1.4-Apple-Erweiterungen .............. 1633.2.4 Hinweise zu diversen Swing-Komponenten .................................. 165

3.3 Fenster mit »Brushed Metal«-Aussehen ...................................................... 167

3.4 Drag & Drop ...................................................................................................... 169

3.5 »Headless«-Applikationen ohne Benutzungsoberfläche ........................... 170

3.6 Literatur & Links ............................................................................................... 171

4 Ausführbare Programme 173

4.1 Shell-Skripte im Terminal ................................................................................ 176

4.2 Doppelklickbare JAR-Archive ......................................................................... 182

4.3 Mac OS X-Applikationen ................................................................................ 1874.3.1 Programmsymbole ............................................................................. 1884.3.2 Programmpakete ................................................................................ 1904.3.3 Jar Bundler .......................................................................................... 1934.3.4 Project Builder, Xcode und Eclipse ................................................. 2034.3.5 Programmpakete von Hand erzeugen ............................................. 206

4.4 Installationswerkzeuge .................................................................................... 2194.4.1 Mac OS X-Hausmittel ........................................................................ 2204.4.2 Kommerzielle Installer ...................................................................... 227

4.5 Java Web Start .................................................................................................. 234

4.6 Applets ............................................................................................................... 2504.6.1 Applets programmieren und einsetzen ........................................... 2514.6.2 Web-Browser ..................................................................................... 2654.6.3 Kommunikation mit dem Browser .................................................. 271

4.7 Literatur & Links ............................................................................................... 282

Page 4: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

7Inhalt

5 Portable Programmierung 285

5.1 Strategien zur portablen Programmierung .................................................. 288

5.2 Häufige Problembereiche ............................................................................... 2925.2.1 Datei- und Pfadtrennzeichen ........................................................... 2925.2.2 Zeilenenden ........................................................................................ 2945.2.3 Zeichenkodierung .............................................................................. 2955.2.4 Runtime.exec() ................................................................................... 297

5.3 Oft benötigte Lösungen .................................................................................. 2985.3.1 PDF-Dokumente ................................................................................ 2985.3.2 Web-Browser und HTML-Dokumente ........................................... 2995.3.3 Zugriff auf serielle Schnittstellen ..................................................... 3015.3.4 Hochauflösende Zeitmessung .......................................................... 3015.3.5 Rendezvous ........................................................................................ 302

5.4 Literatur & Links ............................................................................................... 305

6 Mac OS X-spezielle Programmierung 307

6.1 JNI ....................................................................................................................... 3096.1.1 JNI-Bibliotheken mit Xcode erzeugen ............................................ 3106.1.2 Installationsverzeichnisse für JNI-Bibliotheken .............................. 3176.1.3 JNI-Bibliotheken mit gcc erzeugen ................................................. 3186.1.4 Abhängigkeiten von anderen Bibliotheken .................................... 3196.1.5 Laufzeitumgebungen (JVMs) erzeugen ........................................... 321

6.2 JDirect und JManager ..................................................................................... 3246.2.1 JManager ............................................................................................ 3256.2.2 JDirect ................................................................................................. 325

6.3 Zugriff auf Datei-Metadaten .......................................................................... 327

6.4 Cocoa Java ......................................................................................................... 330

6.5 AppleScript ........................................................................................................ 3406.5.1 AppleScript mit Cocoa Java .............................................................. 3406.5.2 AppleScript mit Shell-Kommandos ................................................. 342

6.6 Speech & Spelling Frameworks ..................................................................... 3436.6.1 Speech Framework ............................................................................ 3436.6.2 Spelling Framework ........................................................................... 345

6.7 Weitere systemabhängige Bibliotheken ...................................................... 3476.7.1 Posix-Aufrufe mit dem Suite/P Toolkit ........................................... 3476.7.2 Authorisation Toolkit ........................................................................ 348

6.8 Literatur & Links ............................................................................................... 349

7 Grafik und Multimedia 351

7.1 Java Advanced Imaging (JAI) und Java Image I/O (JIIO) .......................... 353

Page 5: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Inhalt8

7.2 Java 3D ............................................................................................................... 356

7.3 OpenGL/JOGL ................................................................................................... 358

7.4 Java Media Framework (JMF) ........................................................................ 362

7.5 QuickTime for Java (QTJava) .......................................................................... 3657.5.1 QTJava 6.0 (QuickTime bis Version 6.3) ......................................... 3677.5.2 QTJava 6.1 (QuickTime ab Version 6.4) ......................................... 371

7.6 Sound/Musik ..................................................................................................... 374

7.7 Drucken .............................................................................................................. 375

7.8 Literatur & Links ............................................................................................... 380

8 Werkzeuge 383

8.1 Ant und Maven ................................................................................................. 3858.1.1 Ant in Xcode ....................................................................................... 3888.1.2 Ant in Xcode 1.5 ................................................................................ 3938.1.3 Ant in Eclipse ...................................................................................... 3948.1.4 Programmpakete mit Ant erzeugen ................................................ 3948.1.5 Maven ................................................................................................. 396

8.2 JUnit .................................................................................................................... 3988.2.1 JUnit in Xcode .................................................................................... 4018.2.2 JUnit in Eclipse ................................................................................... 402

8.3 Decompiler ........................................................................................................ 403

8.4 Obfuscators ....................................................................................................... 404

8.5 Bytecode Viewer (Disassembler) ................................................................... 406

8.6 Profiler ................................................................................................................ 408

8.7 JavaBrowser ....................................................................................................... 410

8.8 Jikes .................................................................................................................... 412

8.9 Groovy ................................................................................................................ 413

8.10 UML-Modellierung .......................................................................................... 416

8.11 <oXygen/> XML-Editor .................................................................................... 417

8.12 Literatur & Links ............................................................................................... 418

9 Datenbanken und JDBC 421

9.1 SQL ..................................................................................................................... 424

9.2 JDBC ................................................................................................................... 4269.2.1 Datensätze lesen ................................................................................ 4279.2.2 Datensätze schreiben ........................................................................ 430

9.3 Datenbanken ..................................................................................................... 4319.3.1 MySQL ................................................................................................ 4329.3.2 PostgreSQL ......................................................................................... 4389.3.3 Firebird ................................................................................................ 439

Page 6: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

9Inhalt

9.3.4 HSQLDB .............................................................................................. 4409.3.5 Oracle .................................................................................................. 4409.3.6 Sybase Adaptive Server Enterprise .................................................. 4419.3.7 Berkeley DB Java Edition .................................................................. 441

9.4 ODBC ................................................................................................................. 441

9.5 Literatur & Links ............................................................................................... 442

10 Servlets und JavaServer Pages (JSP) 443

10.1 Servlets .............................................................................................................. 446

10.2 Tomcat ............................................................................................................... 448

10.3 JavaServer Pages (JSP) ..................................................................................... 453

10.4 Webapplikationen ............................................................................................ 455

10.5 Literatur & Links ............................................................................................... 459

11 J2EE und Enterprise JavaBeans (EJB) 461

11.1 JBoss ................................................................................................................... 464

11.2 Enterprise JavaBeans (EJB) ............................................................................. 46711.2.1 Eine einfache Enterprise-Applikation .............................................. 46811.2.2 XDoclet ............................................................................................... 477

11.3 Literatur & Links ............................................................................................... 478

12 J2ME und MIDP 481

12.1 MIDlets entwickeln und testen ..................................................................... 485

12.2 Einsatz im mobilen Endgerät ......................................................................... 49612.2.1 Lokale Installation .............................................................................. 49712.2.2 Installation vom Web-Server ........................................................... 502

12.3 Benutzungsoberflächen und Grafik ............................................................... 503

12.4 Literatur & Links ............................................................................................... 508

A Kurzeinführung in die Programmiersprache Java 509

A.1 Programme, Klassen, Pakete .......................................................................... 509

A.2 Methoden und Anweisungen ........................................................................ 513

A.3 Variablen und Datentypen ............................................................................. 515

A.4 Fallunterscheidungen und Schleifen ............................................................. 516

A.5 Klassen und Objekte ....................................................................................... 518

Page 7: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Inhalt10

A.5.1 Vererbung ........................................................................................... 520A.5.2 Assoziationen ..................................................................................... 522A.5.3 Polymorphismus ................................................................................ 523A.5.4 Abstrakte Klassen und Interfaces ..................................................... 524A.5.5 Innere und anonyme Klassen ........................................................... 526

A.6 Fehlerbehandlung mit Exceptions ................................................................. 528

A.7 Literatur & Links ............................................................................................... 530

B Java auf Mac OS 8/9/Classic 531

C Java 1.5 »Tiger« 541

D System-Properties 547

D.1 Vordefinierte System-Properties ................................................................... 547

D.2 Konfigurierbare System-Properties ............................................................... 549

E VM-Optionen 565

F Xcode- und Project Builder-Einstellungen 577

F.1 Projekteinstellungen ........................................................................................ 578

F.2 Installationseinstellungen ............................................................................... 578

F.3 Target-Einstellungen ........................................................................................ 579

F.4 Java-Einstellungen ........................................................................................... 580

F.5 Programmpaket-Einstellungen ...................................................................... 582

F.6 Standardpfade ................................................................................................... 583

G Mac OS X- und Java-Versionen 585

H Glossar 589

I Die Buch-CD 595

Index 597

Page 8: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

11Vorwort

Vorwort

»Für die meiste Entwicklungsarbeit verwende ich mein PowerBook. Ich halte es für beträchtlich effizienter als ein Desktop-System, denn zum einen hat es alle Möglichkeiten eines vollständigen UNIX-Desk-tops, zum anderen kann ich es mitnehmen, weil es alle Laptop-Eigen-schaften besitzt. Ich kann im Flugzeug arbeiten, zu Hause oder in irgendeiner Ecke, während ich in einer langweiligen Besprechung sitze. Und man kann damit nicht nur e-mailen und surfen, es besitzt voll funktionale, professionelle Entwicklungswerkzeuge.« (James Gosling, Erfinder der Java-Technologie)1

Liebe Leserin, lieber Leser!

Wenn der Erfinder der Java-Technologie so lobende Worte über ein Apple-Sys-tem verliert, wird man hellhörig – was macht die Faszination an ApplesBetriebssystem Mac OS X aus, dass in letzter Zeit immer mehr Entwickler aufdiese Plattform umsteigen oder sie zumindest als zusätzliche Plattform nutzen?Und das bei einem System, dem vor ein paar Jahren kaum ein Außenstehendermehr zugetraut hat, als ein paar nette Grafiken zu bearbeiten – und dessenMaus sowieso (mindestens) eine Taste fehlt?

Zum einen bestechen Apple-Rechner seit Jahren durch gutes Design, das vielekleine Raffinessen bietet. Dadurch, dass Apple sowohl die Computer als auchdas Betriebssystem und wichtige Anwendungen entwickelt, sind Hardwareund Software perfekt aufeinander abgestimmt. Die einfache Bedienbarkeit desklassischen Mac OS ist legendär, und aktuelle Mac OS X-Versionen reichen andiese Benutzerfreundlichkeit wieder heran. Durch den UNIX-Kern vonMac OS X erreicht das System nicht nur eine hervorragende Stabilität, es istauch in der Grundeinstellung bereits gut gegen Angriffe aus dem Internetgeschützt – Sicherheitslücken sind selten und werden schnell behoben, Troja-ner und Würmer können dementsprechend wenig anrichten, Viren sindnahezu unbekannt.

Der UNIX-Kern ist für Entwickler besonders interessant, schließlich könnendadurch viele bekannte Open-Source-Werkzeuge unter Mac OS X genutzt wer-den – entweder werden diese bereits standardmäßig mitgeliefert, oder Sie kön-nen sie sich selbst kompilieren. Und falls Sie die grafische Oberfläche bevor-zugen und Programme wie Adobe Acrobat oder Microsoft Office verwendenwollen, ist dies auch kein Problem.

1 http://www.apple.com/pro/science/gosling/

Page 9: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Vorwort12

Der wichtigste Punkt aber, warum Sie überhaupt dieses Buch aufgeschlagenhaben: Java ist fest ins System integriert – Apple betrachtet Java als eine derStandard-Programmierumgebungen für Mac OS X!

Für wen ist dieses Buch geschrieben?

Dieses Buch spricht sehr unterschiedliche Zielgruppen an: vom langjährigenMac-Anwender, der nun Java programmieren möchte, bis hin zum langjähri-gen Java-Entwickler, der auf Mac OS X umsteigen oder zumindest seineAnwendungen daran anpassen will.

Damit trotz der verschiedenen Voraussetzungen alle zumindest das Zielsystemverstehen und mit den gängigen Begriffen umgehen können, bietet das ersteKapitel die Grundlagen sowohl für die Mac-Bedienung als auch für die Java-Entwicklung mit den Standard-Kommandozeilenwerkzeugen. Danach wirddann angenommen, dass Sie entweder Java schon beherrschen, gerne Beispieleausprobieren (die lauffähig auf der Buch-CD beiliegen) oder nebenbei die Spra-che mit einem weiteren Buch lernen (falls Ihnen das Anhang-Kapitel zu denJava-Grundlagen nicht ausreicht).

Dennoch finden sich in den Kapiteln immer wieder Hinweise, die für Profisvermutlich nichts Neues sind, die aber Einsteigern über viele kleine Fallenhinweghelfen. Die ausführliche Beschreibung der Beispiele richtet sich geradein den ersten Kapiteln an die Einsteiger – Profis werden sich hier wohl eher anden abgedruckten Listings orientieren.

Was dieses Buch nicht ist: eine allgemeine Einführung in die Programmierungoder eine komplette Java-Referenz. Sie sollten bereits ein wenig Programmier-erfahrung in irgendeiner Sprache besitzen, damit Sie etwas mit Begriffen wie»Variable« oder »Schleife« anfangen können. Und den kompletten Umfang vonJava zu berücksichtigen, kann nicht Ziel dieses Buches sein – es konzentriertsich darauf, die Software-Entwicklung für die verschiedenen Java-Bereiche(J2SE, J2EE, J2ME) auf Mac OS X grundlegend vorzustellen und dabei vorallem die Mac-Besonderheiten ausführlich zu beschreiben.

Entscheidungshilfe für potentielle »Switcher«?

Wenn Sie schon lange einen Mac besitzen oder auch kürzlich erst umgestiegensind, stellt sich für Sie die Frage nach der Entwicklungsplattform nicht mehr –Sie möchten Java auf Mac OS X programmieren und portabel auf den diversenJava-Systemen einsetzen. Lesen Sie einfach beim nächsten Abschnitt weiter!

Wenn Sie hauptsächlich für andere Systeme entwickeln und Ihre Java-Anwen-dungen einfach nur möglichst gut an Mac OS X anpassen möchten: Seien Sie

Page 10: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

13Vorwort

beruhigt – Sie benötigen nicht zwingend einen Apple-Rechner, um dieInformationen dieses Buches verwerten zu können. Die meisten Anpassungenfür Mac OS X lassen sich auch mit einer Entwicklungsumgebung unterWindows oder Linux realisieren. Allerdings sollten Sie bedenken, dass ein ver-nünftiger Softwaretest immer nur auf dem System stattfinden kann, wo dieSoftware später auch eingesetzt wird. Daher sollten Sie sich zumindest das Be-triebssystem selbst zulegen und dann mit einer geeigneten Emulationssoftware(beispielsweise »PearPC« von http://pearpc.sourceforge.net/ bzw. http://www.pearpc.net/) auf einem schnellen PC einsetzen.

Sollten Sie schließlich zu der immer größer werdenden Gruppe der Java-Ent-wickler gehören, die sich gerade einen Umstieg auf Mac OS X überlegen, kannIhnen dieses Buch eine gute fachliche Entscheidungshilfe sein. Suchen Sie dazualle Java-Themen zusammen, die Sie derzeit für Ihre Projekte benötigen, undklären Sie anhand der jeweiligen Kapitel, ob und wie diese auf Mac OS Xgenutzt werden können – in der Regel wird es dabei kaum oder keine Problemegeben. Eine Frage, die in diesem Zusammenhang immer wieder gestellt wird:Ist die Java-Entwicklung mit den Mac-Entwicklungsumgebungen wirklich soviel langsamer als unter Windows? Dies kann ich Ihnen leider nicht pauschalbeantworten. Wenn man beide Welten kennt, merkt man bei der Benutzungs-oberfläche definitiv einen Unterschied. Aber was für die einen unerträglichund ein K.o.-Kriterium ist, stört die anderen wenig oder gar nicht. Ganz amAnfang haben Sie bereits James Gosling kennen gelernt, den Erfinder der Java-Technologie, der nach eigenem Bekunden für fast alle Entwicklungsaufgabenseinen portablen Apple-Rechner verwendet. Wenn Sie also die in diesem Buchgezeigten Java-Möglichkeiten auf Mac OS X interessieren, gehen Sie doch ein-fach mal zu einem Mac-Händler in Ihrer Nähe und probieren Sie dort Eclipseoder NetBeans aus.

Wie sollten Sie dieses Buch lesen?

Als Einsteiger sollten Sie zunächst die Java-Kurzeinführung im Anhang lesen,falls Sie Java nur wenig kennen oder Ihr Grundlagenwissen auffrischen möch-ten. Dann können Sie mit Kapitel 1 loslegen. Wenn Sie den Umgang mitMac OS X noch nicht lange gewohnt sind, erfahren Sie am Anfang des Kapitels,wie Sie den Mac richtig bedienen. Daran schließen sich die absoluten Grund-lagen von Java auf Mac OS X an. Das Ende des Kapitels über den Aufbau derApple-Java-Implementierung ist zunächst vermutlich nicht so interessant fürSie. Lesen Sie dann auf jeden Fall noch Kapitel 2 über die diversen Entwick-lungsumgebungen und Kapitel 4 über die unterschiedlichen Möglichkeiten,wie Sie ein Java-Programm als ausführbares Programm verteilen können. Dierestlichen Kapitel lesen Sie dann bei entsprechendem Interesse.

Page 11: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Vorwort14

Als Profi wird Sie zunächst der letzte Teil von Kapitel 1 über die Struktur desApple-Java-Systems interessieren. Gerade wenn das Apple-Betriebssystem neufür Sie ist, kann es aber auch nicht schaden, wenn Sie sich mit den grundlegen-den Bedienweisen des Macs am Anfang des Kapitels vertraut machen. Kapitel 2über die Entwicklungsumgebungen können Sie kurz überfliegen, ebenso Kapi-tel 8 über die diversen Werkzeuge, die Ihnen zum Teil vielleicht schon vonanderen Systemen her bekannt sind. Kapitel 4 über ausführbare Programmeund die Formen der Programmdistribution sowie das kurze Kapitel 5 über por-table Programmierung sollten Sie auf jeden Fall lesen; wenn Sie Anwendungenmit grafischen Benutzungsoberflächen entwickeln, gilt dies auch für Kapitel 3.Zur Feinoptimierung Ihrer Applikationen finden Sie im Anhang Listen der Sys-tem-Properties und der VM-Optionen, ansonsten lesen Sie die restlichen Kapi-tel bei Bedarf.

Und wenn Sie sich irgendwo zwischen Einsteiger und Profi einschätzen,arbeiten Sie das Buch ganz einfach von vorne nach hinten durch!

Da dieses Buch aber nicht zwingend von vorne nach hinten durchgelesen wer-den muss, sondern Sie sich einzelne Kapitel nach Interesse heraussuchen kön-nen, finden Sie die jeweils relevanten Literaturangaben und Internet-Links amEnde jedes Kapitels. Zusammen mit den Links aus dem Fließtext finden Sie dieWebadressen auch auf meiner Webseite zum Buch (s. u.), wo sie regelmäßigaktualisiert werden. Die Links sind trotzdem im Text enthalten, damit Sie einenAnhaltspunkt haben, wonach Sie bei Google suchen könnten. Und damit Siebeim Lesen einzelner Kapitel nicht ständig blättern müssen, werden einigegrundlegende Informationen vereinzelt mehrfach aufgeführt.

Welche Versionen werden behandelt?

Der Fokus des Buchs liegt auf dem derzeit aktuellen Mac OS X 10.3 (»Panther«)mit Java 1.3 und Java 1.4. Bei allen Themen sind wichtige Unterschiede zuMac OS X 10.2 (»Jaguar«) dokumentiert, damit Sie ältere Programme verstehenund gegebenenfalls auf den neuesten Stand bringen können. Hinweise fürnoch ältere Systeme tauchen nur vereinzelt auf, da die Versionen bis ein-schließlich Mac OS X 10.1 im praktischen Einsatz kaum noch von Bedeutungsind.

So weit wie derzeit möglich ist bei den Angaben sichergestellt, dass dieInformationen auch für das kommende Mac OS X 10.4 (»Tiger«) gültig sind, dasJava 1.5 (bzw. J2SE 5.0, wie die Version neuerdings auch heißt) enthalten wird.Im Anhang finden Sie eine kurze Einführung zu Java 1.5.

Page 12: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

15Vorwort

Beispielprogramme

Die Quelltexte sind nicht immer vollständig abgedruckt, beispielsweise wennes sich um Standardcode handelt, der nichts Besonderes zum jeweiligen Bei-spiel beiträgt. Die entsprechenden Stellen sind mit //... gekennzeichnet, aberauf der beiliegenden CD sind die Quelltexte natürlich komplett enthalten.Ebenso wurden im Buch die Quelltext-Kommentare entfernt, da die Beispieleim Fließtext beschrieben werden.

Im Buch wird bewusst kein durchgehendes Beispielprogramm verwendet, undaufbauende Beispiele werden nur dort eingesetzt, wo es einen wirklichenMehrwert bringt. Am häufigsten finden Sie in den Abschnitten also unabhän-gige Beispiele, wodurch aber auch der Struktur des Buches Rechnung getragenwird und Sie die Kapitel weitestgehend unabhängig voneinander lesen können.

Die Beispiele sind bewusst einfach gehalten. Als Profi kennen Sie sowieso grö-ßere Projekte und möchten nur den Mac-relevanten Code kennen lernen, undals Einsteiger würden Sie bei größeren Beispielen zu leicht den Überblick ver-lieren. Daher verwenden die meisten Programme z.B. auch keine aufwändigenOberflächen (abgesehen natürlich von denen im Kapitel über Benutzungsober-flächen), damit Sie schnell das Wesentliche erkennen und einfach aus demQuelltext heraus kopieren können.

Wo Sie die Beispiele auf der beiliegenden Buch-CD finden und was darauf sonstnoch enthalten ist, wird im Anhang kurz beschrieben. Alternativ lassen Sie sicheinfach die Datei index.html aus dem CD-Wurzelverzeichnis in einem Web-Browser anzeigen.

Schriftdarstellung

Dieses Buch verwendet folgende Konventionen für die Schriftdarstellung derunterschiedlichen Textbestandteile:

Textbestandteil Darstellung

Programmquelltext (Listings) /* Schrift mit fester Zeichenbreite */

Java-Bezeichner (Variablen, Methoden, Klassen)

Schrift mit fester Zeichenbreite:meinObjektindexOf()String

Dateinamen und Pfadangaben Schrift mit fester Zeichenbreite:/Programme/TextEdit

Verwendete Schriftkonventionen

Page 13: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Vorwort16

Der Mac besitzt diverse Umschalttasten mit verschiedenen Bezeichnungen:Shift, Ctrl (Steuerung), Alt (Wahl bzw. Option), Apfel (Command / Befehl bzw.Propeller). In Abbildung 0.1 sehen Sie beispielsweise den Menüeintrag »Ein-setzen« mit dem Tastaturkürzel (°)+(V), darunter den Eintrag »Mit aktuellemStil einsetzen« mit dem Kürzel (±)+(ª)+(°)+(V). Die Umschalttaste (Ctrl) wirdbeim Mac eher selten bei Menüeinträgen benutzt, dort würde dann das Dach(^) auftauchen.

Symbole der Umschalttasten

Danksagung

Ein herzliches Dankeschön gilt dem gesamten Team von Galileo – ohne siewürden Sie dieses Buch schließlich nicht in den Händen halten! Ganz besonde-rem Dank bin ich dabei meinem Lektor Stephan Mattescheck verpflichtet – fürdie gute Betreuung und die unendliche Geduld, die ein Lektor wohl immer beisolchen Projekten aufbringen muss. Bedanken möchte ich mich auch beimMac-Stammtisch Karlsruhe (http://www.mac-ka.de/), bei den Schwarzwäldern

Befehle und Programm-ausgaben

Schrift mit fester Zeichenbreite:java –version

Programmbeispiele auf der CD, hier »HalloWelt« in Kapitel 1

Schrift mit fester Zeichenbreite (es handelt sich um Pfadangaben auf der CD)://CD/examples/ch01/hallo/HalloWelt.java

Web-Adressen (URLs) Kursivschrift:http://www.muchsoft.com/java/

Menüs und Menüeinträge, Texte auf dem Bildschirm

Menütitel • Menüeintrag • Untermenüeintrag usw.:Bearbeiten • KopierenAblage • Sichern unter...Einzelne Menüeinträge und Texte auf dem Bildschirm werden auch in Anführungszeichen gesetzt.

Tastaturkürzel (Shortcuts) Die Umschalttasten werden ausgeschrieben. Einzelne Buch-staben werden großgeschrieben, (ª) ist dabei aber nur zu drücken, wenn dies auch in der Tastenkombination steht. Sonstige Aktionen werden normal dargestellt:(°)+(Q)(Ctrl)+KlickSo angegebene Tastaturkürzel sind zusammen auszuführen (bzw. erst die Umschalttasten, dann der Rest).

Textbestandteil Darstellung

Verwendete Schriftkonventionen (Forts.)

Page 14: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

17Vorwort

und bei vielen Verwandten und Bekannten für ihr beständiges Interesse amFortschritt (»Na, was macht das Buch? Immer noch nicht fertig?« ;-)) – durchihre Fragen wurde mein Augenmerk immer wieder auf kleine, wichtige Detailsgelenkt, die es zu berücksichtigen galt. Und nicht zuletzt ein ganz liebes Danke-schön an Gesine, die das Buch von Anfang an begleitet und mich mit Kreativitätund Motivation unterstützt hat!

Kontakt

Wenn Sie Fragen, Anregungen oder Verbesserungsvorschläge haben, schreibenSie mir an [email protected] oder schicken Sie Ihre Post an den VerlagGalileo Press. Schauen Sie aber am besten vorher auf meiner privaten Webseitezum Buch (http://www.muchsoft.com/java/) vorbei, ob Ihre Fragen und Wün-sche dort vielleicht schon beantwortet sind. Und natürlich können Sie auch dieVerlagsseite http://www.galileocomputing.de/ besuchen, wo gegebenenfalls On-line-Aktualisierungen für das Buch zur Verfügung stehen.

Zum Schluss bleibt mir nur noch, Ihnen viel Spaß beim Lesen und Auspro-bieren zu wünschen – viel Erfolg mit der Java-Programmierung auf und fürMac OS X!

Thomas MuchKarlsruhe, im Oktober 2004

Page 15: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

1

2

3

4

5

6

7

8

9

10

11

12

A

B

C

D

E

F

G

H

I

1 Grundlagen

1.1 Historisches ............................................................. 22

1.2 Aktuelles ................................................................. 24

1.3 Den Mac richtig bedienen ....................................... 25

1.4 Eingeben, übersetzen, ausführen ............................ 35

1.5 Entwicklerwerkzeuge und -dokumentation ............. 42

1.6 Up to date bleiben .................................................. 44

1.7 Mac OS X erkennen ................................................. 47

1.8 Konfigurationsdateien speichern ............................. 52

1.9 Aufbau des Apple-Java-Systems .............................. 55

1.10 Kleine Fallen ............................................................ 69

1.11 Literatur & Links ...................................................... 70

Page 16: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

1 Grundlagen

2 Entwicklungsumgebungen

3 Grafische Benutzungsoberflächen (GUI)

4 Ausführbare Programme

5 Portable Programmierung

6 Mac OS X-spezielle Programmierung

7 Grafik und Multimedia

8 Werkzeuge

9 Datenbanken und JDBC

10 Servlets und JavaServer Pages (JSP)

11 J2EE und Enterprise JavaBeans (EJB)

12 J2ME und MIDP

A Kurzeinführung in die Programmiersprache Java

B Java auf Mac OS 8/9/Classic

C Java 1.5 »Tiger«

D System-Properties

E VM-Optionen

F Xcode- und Project Builder-Einstellungen

G Mac OS X- und Java-Versionen

H Glossar

I Die Buch-CD

Page 17: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

21Grundlagen

1

2

3

4

5

6

7

8

9

10

11

12

13

1 Grundlagen

»Beginne am Anfang«, sagte der König ernst, »und fahre fort, bis du ans Ende kommst: Dann höre auf.«(Lewis Carroll)

In diesem Buch treffen zwei Welten aufeinander, die zwar perfekt zueinanderpassen, die aber bisher oft noch nichts voneinander mitbekommen haben – dieWelt der Apple-Macintosh-Programmierer, die bisher wenig mit Java zu tunhatten, und die Welt der Java-Programmierer, die bisher meistens unter Win-dows oder Linux entwickelt und Apple-Rechner und deren BetriebssystemMac OS X als »schönes Spielzeug« abgetan haben. Egal, welcher der beidenWelten Sie angehören – in diesem Grundlagen-Kapitel bekommen Sie eineschnelle und einfache Einführung sowohl in Mac OS X als auch in Java.

Als Umsteiger werden Sie sich sicherlich speziell für die Mac-Besonderheiteninteressieren. Und da Sie für dieses für Sie neue System Software entwickeln wol-len, müssen Sie diese Besonderheiten verstehen, damit Sie wie ein langjährigerMac-Anwender denken lernen. Dazu gehört unter anderem die grundlegendePhilosophie des Systems (Maus, Menü, Fenster), ebenso wie allgemein üblicheTastenkürzel und Bedienweisen. java und javac sind für Sie nichts Neues, aberwir fangen wie üblich trotzdem damit an, damit Sie einen schnellen Überblicküber das Java-System von Mac OS X bekommen – danach werden Sie dann ver-mutlich sowieso ein bisschen selbst herumprobieren. Die bekannten sowie Mac-spezifische Entwicklungsumgebungen behandelt das nächste Kapitel.

Als Mac-Anwender kennen Sie die Bedienung des Systems bereits – aber wennauch Sie ein »kleiner« Umsteiger von Mac OS 8 bzw. 9 oder Mac OS X 10.1sind, werden Sie hier sicherlich noch einige nützliche Tipps entdecken. ImWesentlichen möchten Sie aber Java kennen lernen. Deshalb eine kleine War-nung vorweg: Dies ist kein reines Java-Einsteigerbuch! Im Anhang gibt es zwareine Kurzeinführung in die Sprache Java. Wenn Sie aber noch keine Program-miersprache beherrschen oder anhand vieler Beispiele lernen möchten, wieman in Java for-Schleifen programmiert, sollten Sie zusätzlich ein weiteresBuch zu Rate ziehen. Wenn Sie dagegen schon programmieren können, Javavielleicht vor einigen Jahren in der Schule oder an der Uni gesehen haben odereine neue Sprache am besten mit kleinen Beispielprogrammen kennen lernen,werden Sie sich hier prima zurecht finden. Dementsprechend geht es in diesemKapitel mit dem bekannten »Hallo Welt« los, mit dem Sie alle wichtigenSchritte bis zum fertigen Java-Programm einmal sehen werden.

Page 18: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen22

Doch zunächst einmal starten wir mit einem kurzen Abriss der Entwicklungs-geschichte von Java im Allgemeinen und von Java auf dem Macintosh imSpeziellen.

1.1 Historisches

Als Sun die Java-Technologie im Jahre 1995 ankündigte, war der Internet-Boom gerade dabei, so richtig loszulegen. Es gab mittlerweile grafische Brow-ser für die wichtigsten Betriebssysteme, um Webseiten plattformübergreifenddarzustellen, aber die Software musste immer noch für jedes System einzelnentwickelt werden. Man suchte also nach einer Lösung, um Programme für alleSysteme zusammen nur noch ein einziges Mal schreiben und übersetzen zumüssen, und Java kam dafür wie gerufen.

Anfang 1996 veröffentlichte Sun Java 1.0, und schon damals war alles Nötigefür den »Write once, run anywhere«-Ansatz dabei: die ProgrammierspracheJava mit einer ziemlich exakten Spezifikation; ein passender Compiler, um ausJava-Quelltexten ausführbaren Java-Bytecode zu generieren; die Java VirtualMachine (auch JVM oder Java VM genannt) als »Interpreter« oder besser Lauf-zeitumgebung zur Ausführung des Java-Bytecodes; und schließlich die Klassen-bibliotheken, die es überhaupt erst ermöglichen, plattformunabhängig Benut-zungsoberflächen, Netzwerkzugriffe usw. zu realisieren. Mit dieser Versionkonnte man schon gut erahnen, welche Möglichkeiten Java bieten würde, aberwie bei jeder Version 1.0 gab es viele kleine Macken – und eine große: die rechtgemächliche Ausführungsgeschwindigkeit.

Anfang 1997 war dann Java 1.1 verfügbar. Es gab zur Geschwindigkeitsver-besserung jetzt einen Just-in-time-Compiler (JIT), der Java-Programme wäh-rend der Ausführung nebenbei in Maschinencode übersetzen konnte. Außer-dem wurde die Programmiersprache selbst ein bisschen aufgeräumt underweitert.

Seit Ende 1998 gibt es Java 1.2, und da diese Version eine enorme Vergröße-rung und Verbesserung der Klassenbibliotheken mitbrachte (z.B. Swing alsumfangreiche Oberflächen-Bibliothek oder die Collections API für dynamischeDatenstrukturen), spricht Sun seitdem von der »Java 2 Plattform«. Im Jahre2000 kam dann Java 1.3 heraus und brachte die »HotSpot« Virtual Machinemit, die deutlich besser just in time übersetzen konnte. Seitdem braucht sichJava geschwindigkeitsmäßig nicht mehr hinter C++ verstecken. Java 1.4 wurdeEnde 2002 fertig gestellt. Neben einer neuen, schnellen I/O-Bibliothek wurdenzahlreiche bis dahin externe Pakete in die Standardbibliotheken integriert, dar-unter solche zur XML-Verarbeitung sowie reguläre Ausdrücke zur schnellenTextsuche.

Page 19: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

23Historisches

1

2

3

4

5

6

7

8

9

10

11

12

13

Java bzw. das JDK (»Java Development Kit«) wurde von Sun zunächst nur fürSolaris und Windows, seit 2001 dann auch für Linux zur Verfügung gestellt(ebenso das JRE, das »Java Runtime Environment«, das bei Endanwenderninstalliert werden kann und entsprechend die Entwicklungswerkzeuge nichtenthält). Als Java das Licht der Welt erblickte, verkaufte Apple gerade die letz-ten 68k-Computer (mit 68030- bzw. 68040-Prozessoren) und hatte denUmstieg auf die PowerPC-Architektur (PPC, die ersten Generationen der heuti-gen G4- und G5-Prozessoren) fast abgeschlossen. Aktuell war zu der ZeitMac OS 7. Von Anfang an hat Apple die Entwicklung des Java-Systems für dasMac OS selbst in die Hand genommen (bzw. nehmen müssen) – trotz guterKontakte zu Sun war der Apple-Marktanteil damals einfach zu klein, als dassApple von Sun direkt unterstützt wurde.

Mit etwas über einjähriger Verzögerung erschien Anfang 1997 MRJ 1.0(»Macintosh Runtime for Java«), was Suns Java 1.0.2 entsprach. Es warBestandteil von Mac OS 8 und war für 68k- und PPC-Rechner erhältlich. Bereitsein halbes Jahr später kam MRJ 1.5 auf den Markt, das einen JIT-Compiler unddie Programmierschnittstelle MRJToolkit mitbrachte, aber Java-seitig blieb esnoch beim alten JDK 1.0.2. Das änderte sich Ende 1997 (am 31.12., Applehatte es noch für 1997 versprochen) mit MRJ 2.0, nun war endlich Java 1.1(genauer das JDK 1.1.3) auf dem Mac verfügbar. Und dabei blieb es fürMac OS 8 und 9 (die so genannten »Classic«-Systeme) im Wesentlichen bisheute. Seit MRJ 2.2 ist das JDK auf dem Stand 1.1.8 (der letzten Sun-Versionvon Java 1.1), aber Java 1.2 oder neuer gibt es für das alte Mac OS nicht.

Dann kam Mac OS X (das X wird »Ten« gesprochen), Apples nächste Betriebs-systemgeneration. Auf UNIX basierend, mit einer neuen, grafischen Benut-zungsoberfläche, die trotzdem wieder die Schlichtheit und einfache Benutzbar-keit bieten sollte – Apple hatte sich viel vorgenommen. Im Herbst 2000 wurdeeine »Public Beta« verteilt, im Frühjahr 2001 war dann Mac OS X 10.0 (Code-name »Cheetah«) erhältlich – und Java 1.3 (das JDK bzw. JRE 1.3.0) wurde fer-tig installiert mitgeliefert! Intern wurde das komplett neu entwickelte Java-Sys-tem MRJ 3.0 genannt, aber Apple verabschiedet sich nach und nach von demNamen MRJ, um sich dem Sun-Versionsschema anzupassen. Leider merkteman diesem System seinen 1.0-Status an, entsprechend wird Mac OS X 10.1(»Puma« – Apple mag Raubkatzen), das im Herbst 2001 erschien, von vielen alserste benutzbare Mac OS X-Version angesehen. Enthalten war darin auch dasJDK 1.3.1, das es zuvor schon als separates Update gegeben hatte.

Im Jahre 2002 wurde dann das nächste größere System-Update, Mac OS X 10.2(»Jaguar«) veröffentlicht. Ab Werk war immer noch das JDK 1.3.1 dabei, Java1.4.1 konnte dann 2003 als Update installiert werden. Bei Mac OS X 10.3

Page 20: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen24

(»Panther«), das seit Herbst 2003 verkauft wird, sind beide JDKs (1.3.1 und1.4.1) bereits vorinstalliert.

Von Anfang an hat Apple auch immer eigene Java-Entwicklertools und-Dokumentationen kostenlos zur Verfügung gestellt. Früher war dies das MRJSDK mit einer Sammlung kleiner Tools, bei Mac OS X ist dies eine kompletteEntwicklungsumgebung.

MRJ 2.2.x kann heute immer noch auch unter Mac OS X verwendet werden,und zwar in der »Classic«-Umgebung, wo dann ein komplettes Mac OS 9 alsseparater Mac OS X-Prozess läuft. Da aber mittlerweile kaum noch jemand fürJava 1.1 oder das alte Mac OS entwickelt, wird dieses Thema nur kurz imAnhang behandelt.

1.2 Aktuelles

Für die Betriebssysteme Solaris, Linux und Windows steht auf http://java.sun.com/ mittlerweile Java 1.5 bzw. die J2SE 5.0 zur Verfügung (»Java 2Platform Standard Edition« Version 5.0 – Sun lässt bei den Versionsnummernnun die »1« weg). Die neue Version integriert unter anderem die »Generics«(grob vergleichbar mit C++-Templates) in die Sprache Java – im Anhang findenSie einen kurzen Überblick über die neuen Möglichkeiten.

Mac OS X 10.2 hat Updates bis auf Version 10.2.8 erfahren, bringt Java 1.3.1mit und kann mit dem Java 1.4.1-Update erweitert werden (vermutlich wirddies auch die letzte Java-Version für diese Systemversion sein). Als Entwick-lungsumgebung stellt Apple den »Project Builder« zur Verfügung.

Mac OS X 10.3 bringt von Anfang an Java 1.3.1 und 1.4.1 mit. Apples neueEntwicklungsumgebung hierfür sind die »Xcode Tools«, eine Weiterentwick-lung des Project Builders. Mit einigen Monaten Verspätung steht für dieses Sys-tem nun auch das JDK 1.4.2 als Update zur Verfügung, ebenso wie die Erweite-rungen »Java 3D« und »Java Advanced Imaging« (JAI).

Im ersten Halbjahr 2005 soll dann Mac OS X 10.4 (»Tiger«) erscheinen. Wel-che Java-Versionen mitgeliefert werden, ist derzeit noch nicht abzusehen. Es istaber sehr wahrscheinlich, dass Apple das aktuelle Java 1.5 fest ins Betriebs-system integriert.

Apple liefert nicht nur das »normale« Mac OS X für Client-Systeme aus, son-dern auch die Server-Variante Mac OS X Server. Da sich beide Varianten ausJava-Sicht nicht wesentlich unterscheiden, wird in diesem Buch nur bei Bedarfauf Mac OS X Server hingewiesen. Die wichtigsten Unterschiede betreffen dieEinstellungen der Java Virtual Machine, die im Anhang-Kapitel über die VM-

Page 21: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

25Den Mac richtig bedienen

1

2

3

4

5

6

7

8

9

10

11

12

13

Op-tionen besprochen werden. Weitere Informationen zu Mac OS X Server fin-den Sie auf der Seite http://www.apple.com/server/macosx/.

Was Sie am historischen Überblick und an den aktuellen Daten sehen können:Da das Java-System von Mac OS X eine Eigenentwicklung von Apple ist (auchwenn diese zunehmend mit den Sun-Sourcen synchronisiert ist), gibt es immergewisse Verzögerungen, bis eine neue Java-Version auch für den Mac ange-boten wird. Der Zeitabstand zwischen dem öffentlichen Sun-Release und App-les Mac OS X-Anpassung ist meistens gar nicht so groß. Die Lücke wirkt aller-dings deutlich länger, da Sun oft Monate vor dem öffentlichen ReleaseEntwickler-Vorabversionen freigibt, und diese sind in der Regel nicht für denMac erhältlich.

Wenn Sie damit leben können, nicht immer die allerneuesten Java-Vorabver-sionen zur Verfügung zu haben, besitzen Sie mit Mac OS X nicht nur ein her-vorragendes System für den Einsatz Ihrer Java-Applikationen, sondern Sie kön-nen damit genauso gut Java-Software entwickeln, die dann natürlich auchwieder auf anderen Plattformen eingesetzt werden kann! Und bevor wir nungleich mit der eigentlichen Java-Programmierung beginnen, lernen Sie erstnoch den Mac und seine Oberfläche besser kennen.

1.3 Den Mac richtig bedienen

Wenn die grafische Benutzungsoberfläche (GUI, »Graphic User Interface«) vonMac OS X neu für Sie ist, nehmen Sie sich bitte die Zeit, sich in die Mac-Philo-sophie ein bisschen einzudenken. Denn auch wenn Desktop-Rechner heutzu-tage meistens mit einer grafischen Oberfläche bedient werden, gibt es dochzum Teil erhebliche Unterschiede – nicht nur im Aussehen, sondern auch in derFunktionsweise. Apple hat eine über 20-jährige Erfahrung mit grafischenBenutzerschnittstellen (1983 kam der Lisa-Computer auf den Markt, 1984 dererste Macintosh), und in dieser Zeit wurden die Konzepte oft getestet und invielen nützlichen Kleinigkeiten verbessert. Das Problem dabei ist: Wenn Siebisher Oberflächen wie Windows oder Linux-KDE gewohnt sind, haben Siesich wahrscheinlich schon an deren »Denkweise« gewöhnt und kommenmanchmal nicht mehr darauf, wie man den Schreibtisch (Desktop) intuitivbedienen könnte (das ist nicht negativ gemeint, das entspricht einfach nurregelmäßigen Erfahrungen von Umsteigern).

Da Sie Java-Anwendungen entwickeln wollen, die auch von langjährigen Mac-Benutzern als »normale« Mac-Applikation erkannt und bedient werden sollen,finden Sie in diesem Abschnitt die wichtigsten Ideen und Begriffe rund um dieaktuelle Mac-Oberfläche, damit Sie diese auch in Java berücksichtigen können.

Page 22: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen26

Vor Mac OS X sah die Mac-Oberfläche deutlich anders aus, daher ist es auch fürUmsteiger von solchen Systemen ratsam, das Folgende wenigstens zu über-fliegen. Und falls Sie sich bisher generell geweigert haben, die »Designer-Ober-fläche« vom Mac anzufassen, hier noch eine kleine Beruhigung: Gerade inMac OS X 10.3 hat Apple einige Funktionen zusätzlich eingebaut, die Ihnen alsAnwender von z.B. Windows eine etwas gewohntere Umgebung präsentieren.

Zunächst einmal gibt es seit der Einführung von Mac OS X eine vernünftigeBenutzerverwaltung. Wenn Sie Mac OS X selbst installiert haben, haben Siesich ein Benutzerkonto mit Namen und Passwort eingerichtet, mit dem Sie sichnach dem Rechnerstart anmelden können. Es ist auch möglich, einen bestimm-ten Benutzer automatisch anmelden zu lassen, aber aus Sicherheitsgründensollten Sie dies in den Systemeinstellungen deaktivieren. Die Systemeinstel-lungen finden Sie normalerweise unten am Bildschirmrand im so genannten»Dock«, in das Sie übrigens beliebige Anwendungen und (rechts vom Trenn-strich) Dokumente ziehen können, die dort dann als Verknüpfung abgelegtwerden. In den Systemeinstellungen können Sie dann im Bereich »Benutzer«unter »Anmelde-Optionen« festlegen, dass kein Benutzer automatisch ange-meldet wird. In Zukunft werden Sie dies teilweise abgekürzt als Systemein-stellungen • Benutzer • Anmelde-Optionen lesen. Man kann das Dock unterSystemeinstellungen • Dock übrigens auch so konfigurieren, dass es beispiels-weise rechts am Bildschirmrand erscheint.

Abbildung 1.1 Das Dock und die Systemeinstellungen

Page 23: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

27Den Mac richtig bedienen

1

2

3

4

5

6

7

8

9

10

11

12

13

Nach der Anmeldung (dem Login) sehen Sie den »Finder« samt Desktop. Mitdem Finder verwalten Sie das Dateisystem und navigieren durch die Verzeich-nishierarchie. Er ist grob mit dem Datei-Explorer anderer Systeme vergleich-bar, wir sehen ihn uns gleich noch genauer an.

Oben am Bildschirmrand befindet sich die Menüleiste. Es gibt immer nur eineeinzige sichtbare Menüleiste, und zwar die der gerade aktiven (obersten) Appli-kation. Wenn eine andere Anwendung aktiv wird, schaltet Mac OS X die Menü-leiste entsprechend um. Innerhalb von Fenstern haben Menüleisten bei Mac-Applikationen nichts zu suchen, dort tauchen höchstens Toolbars auf.

Ganz wichtig, Sie sehen es bereits: Es kann eine Menüleiste geben, ohne dassdie zugehörige Applikation ein Fenster geöffnet hat! Wenn Sie ein Fensterschließen, schließen Sie im Normalfall wirklich nur das Fenster und beendennicht gleichzeitig die Anwendung. Dies ist erfahrungsgemäß fast die größteHürde für Windows-Anwender. Denken Sie daran, Ihre Applikationen zu been-den! Apple geht allerdings nach und nach dazu über, Programme, die nur auseinem einzigen Dialogfenster bestehen (»grafische Tools«), beim Schließen die-ses Dialogs automatisch zu beenden, beispielsweise die Systemeinstellungen.

Ganz links finden Sie in jeder Menüleiste das Apfel-Menü. Dies gehört nichtder Applikation, sondern dem System, dementsprechend müssen Sie sichdarum bei der Programmierung auch nicht kümmern. Im Apfel-Menü habenSie Zugang zu den Systemeinstellungen, können sich als Benutzer abmelden,den Rechner ausschalten usw.

Direkt daneben liegt immer das Programm-Menü, das den Namen der aktivenApplikation trägt (daran erkennen Sie am einfachsten, welche Anwendunggerade aktiv ist!). Alle Tastatureingaben – sofern sie nicht vom System abge-fangen werden, z.B. spezielle Tastenkürzel – landen bei der aktiven Appli-kation. Im Programm-Menü können Sie das aktive Programm ausblenden(dann sind weder Fenster noch die Menüleiste sichtbar), beenden und den Ein-stellungen-Dialog aufrufen. Dieser Menüpunkt befindet sich immer hier undnicht in irgendeinem Extras-Menü! Gleiches gilt für die Programminforma-tionen »Über Programmname«, die auch hier (und nicht im Hilfe-Menü) abzu-rufen sind.

Beim Finder sehen Sie im Programm-Menü, dass er eine besondere Stellung imSystem hat – er wird automatisch gestartet und kann nicht beendet werden.Dies macht Sinn, denn er kümmert sich ja um den Desktop, und dieser istimmer im Hintergrund zu sehen. Mit dem Desktop können Sie auch jederzeitzum Finder umschalten, indem Sie einfach auf den Desktop-Hintergrund kli-cken. Wenn die gerade aktive Applikation offene Fenster hat, werden dieseinaktiviert, anschließend wird der Finder zur obersten Applikation.

Page 24: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen28

Generell können Sie jede Applikation aktivieren, indem Sie auf deren Icon(Programmsymbol) im Dock klicken. Im Dock sieht man an einem kleinenDreieck unter dem Programmsymbol, dass die Anwendung derzeit läuft undman durch Anklicken des Symbols sofort zum Programm umschaltet (nebenbeikönnen Sie damit auch ausgeblendete Programme wieder einblenden). Fehltdas Dreieck, wird die Anwendung beim Anklicken erst noch gestartet. WennSie lieber mit der Tastatur als mit der Maus arbeiten, können Sie auch mit(°)+(ÿ) zwischen den laufenden Applikationen wechseln. Bei Mac OS X 10.3wird der Wechsel groß auf dem Bildschirm angezeigt, bei 10.2 nur klein imDock.

Sie haben gerade ein Tastaturkürzel (Shortcut) gesehen – auch ein Mac kann mitder Tastatur bedient werden, selbst wenn die Oberfläche zunächst einmal sehrMaus-lastig ist. An folgende Namen von Umschalttasten sollten Sie sich gewöh-nen: (°) (auch Propeller- oder Befehlstaste genannt), (±) (Option- oder Wahl-taste), (Ctrl) (Steuerung) und (ª) (Umschalttaste). Mobile Rechner habenzusätzlich noch eine (Fn)-Taste, die aber für Programm-Shortcuts nicht relevantist. Die wichtigsten Kürzel sind wohl (°)+(W) zum Schließen des obersten (akti-ven) Fensters und (°)+(Q) zum Beenden der aktiven Applikation.

Vielleicht sind Sie es von Ihrem System gewohnt, dass Sie sich mit (ÿ) durchalle Elemente eines Dialogs bewegen können. Beim Mac OS bewegt man sichdamit eigentlich nur durch die Texteingabefelder. Sie können aber die Option»Tastatursteuerung einschalten« in Systemeinstellungen • Tastatur&Maus •

Tastatur-Kurzbefehle aktivieren, dann sind alle Elemente eines Dialog mit(ÿ) bzw. den Pfeiltasten erreichbar. Ausgeführt wird das markierte Elementmit der Leertaste.

Zurück zur Menüleiste und den typischen Menüs. Neben dem Programm-Menü sollte sich immer das Ablage-Menü mit den Dateioperationen befinden,daneben das Bearbeiten-Menü. Hier tauchen die Menüeinträge »Ausschnei-den«, »Kopieren« und »Einsetzen« mit den Kürzeln (°)+(X)/(C)/(V) auf. Beach-ten Sie, dass Windows mangels (°)-Taste stattdessen einfach (Strg) (Control)verwendet. Bei Java-Programmen können Sie glücklicherweise mit nur gerin-gem Aufwand die Entscheidung »Apfel- oder Strg-Taste?« dem System über-lassen. Andere Standardeinträge in diesem Menü sind »Widerrufen« (Undo)und »Alles auswählen«.

Zur Verbesserung des (°)+(ÿ)-Programmwechsels wird – gerade unterMac OS X 10.2 – gerne die Software »LiteSwitch« verwendet: http://www.proteron.com/liteswitchx/.

Page 25: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

29Den Mac richtig bedienen

1

2

3

4

5

6

7

8

9

10

11

12

13

Am rechten Ende der Menüleiste gibt es üblicherweise ein Fenster-Menü mitallen offenen Fenstern der aktiven Applikation sowie das Hilfe-Menü.

Sehen wir uns den Desktop noch etwas genauer an. Am rechten oberen Randliegen normalerweise alle angemeldeten Laufwerke (das können auch dieeinzelnen Partitionen – beim Mac »Volumes« genannt – einer Festplatte sein).Sollten diese dort nicht auftauchen, können Sie die Anzeige über den Menü-punkt Finder • Einstellungen einschalten (siehe Abbildung 1.2).

Abbildung 1.2 Finder-Einstellungen

Auf dem Desktop können Sie alles Mögliche ablegen (so wie Sie es von Ihrem»echten« Schreibtisch gewohnt sind ;-). Per Drag & Drop mit der Maus könnenSie hierhin Dateien aus beliebigen Verzeichnissen ziehen, Text in einem Fens-ter selektieren und als Text-Clip auf den Desktop ziehen, URLs aus der Browser-Adressleiste als URL-Clip ablegen ... Und natürlich können Sie solche Clipsdann auch wieder zurück in die Anwendung ziehen (oder einfach doppeltanklicken).

Um im Dateisystem zu arbeiten, öffnen Sie ein Finder-Fenster durch Doppel-klick auf ein Laufwerkssymbol. Wenn der Finder die aktive Applikation ist,können Sie auch (°)+(N) drücken, um ein neues Fenster zu öffnen. Es könnenbeliebig viele Fenster gleichzeitig offen sein, zwischen denen Sie dann hin- undherkopieren können. Wichtig: Der Mac kennt keine MDI-(Multiple DocumentInterface)-Dokumente! Es gibt also keine Fenster, die die eigentlichen Doku-mentfenster enthalten. Alle Dokumente liegen in eigenständigen, »normalen«Fenstern.

Page 26: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen30

Abbildung 1.3 Finder-Fenster

Einen Ordner öffnen Sie durch einen Doppelklick im selben Fenster. Wenn Siezusätzlich zum Klick die (°)-Taste gedrückt halten, geht der Ordner in einemneuen Fenster auf. Ein Doppelklick auf ein Programm startet dieses. Alternativkönnen Sie das Programmsymbol auch nur selektieren (z.B. mit einem Einfach-klick oder den Pfeiltasten) und dann mit (°)+(O) starten.

Apple liefert übrigens alle Mäuse immer noch mit nur einer Maustaste aus.Während dies Einsteigern entgegenkommt, wünschen Sie sich als Program-mierer eventuell mehr Tasten und ein Scrollrad. Kein Problem: Schließen Sieeinfach Ihre Lieblings-USB-Maus an, Mac OS X unterstützt die zusätzlichen Tas-ten, ohne dass Sie irgendwelche Treiber installieren müssen. Und bei einer Ein-Tasten-Maus können Sie den Rechtsklick durch (Ctrl)+Klick emulieren.

Jetzt ist es leider an der Zeit, mit einem Mythos aufzuräumen ... Auch Mac-Pro-gramme können abstürzen! Und falls eine Applikation einmal »hängt«, können

Wenn Sie bei so vielen offenen Fenstern den Überblick verlieren, hilft zumeinen das Fenster-Menü in jeder Menüleiste. Zum anderen können Sie abMac OS X 10.3 einfach (F9) drücken, womit Sie die Exposé-Funktion akti-vieren – alle Fenster werden verkleinert nebeneinander auf dem Bildschirmangezeigt, und Sie können das gewünschte Fenster aus dieser Übersicht aus-wählen.

Für UNIX-Anwender: In Abbildung 1.3 sehen Sie das System-Wurzelver-zeichnis aus Anwendersicht. Wenn Sie in der Shell ls / eingeben, tauchenauch die Ihnen geläufigen Verzeichnisse /bin, /etc, /usr usw. auf.

Page 27: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

31Den Mac richtig bedienen

1

2

3

4

5

6

7

8

9

10

11

12

13

Sie sie jederzeit im »Programme sofort beenden«-Dialog hart terminieren(»abschießen« oder »killen«), den Sie mit (±)+(°)+(Esc) erreichen. SeitMac OS X 10.3 können Sie die oberste Applikation direkt ohne Nachfrage mit(ª)+(±)+(°)+(Esc) aus dem Speicher entfernen. Aber Achtung: Bei beidenMethoden gehen geänderte Daten in den Anwendungen verloren!

Im Finder-Fenster »Macintosh HD« sehen Sie die Standardverzeichnisse desSystems, darunter Programme (hier befinden sich Applikationen für alleAnwender des Rechners) und Benutzer (hier hat jeder Anwender des Rechnerssein eigenes, geschütztes Home-Verzeichnis). Falls Sie stattdessen die engli-schen Bezeichnungen Applications und Users sehen, sollten Sie in Finder •Einstellungen • Erweitert die Option »Alle Suffixe zeigen« ausschalten. DieBeispiele in diesem Buch verwenden die deutschen Namen, für das Funktio-nieren ist dies aber egal.

In den Verzeichnissen (und damit auch auf dem Desktop) können Sie auch Ver-knüpfungen (Aliase, Links) erzeugen. Ziehen Sie eine beliebige Datei einfachmit gedrückter (±)- und (°)-Taste in das Zielverzeichnis. Dort wird dann einSymbol mit einem kleinen Pfeil an der unteren linken Ecke angezeigt. Achtung:Dies ist leider kein UNIX-Softlink! Softlinks erzeugen Sie nur mit ln -s in derShell, die der Finder dann aber trotzdem als Alias verwenden kann.

Wenn Sie mehr über die Konzepte der Mac OS X-Benutzungsoberfläche (auch»Aqua« genannt) wissen möchten, sehen Sie sich bitte die ausführlichen »HumanInterface Guidelines« von Apple an, die Sie im Web auf http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/ finden.

Ein paar Anmerkungen noch zu Festplatten am Mac. Eine Festplatte kann inmehrere Volumes (Partitionen) aufgeteilt sein. Auf jedem Volume können Siebei Bedarf ein komplettes Betriebssystem installieren und so unterschiedlicheMac OS X-Versionen zum Testen auf einem Rechner verfügbar haben. DasVolume des aktiven Betriebssystems wird Startvolume genannt und kannunter Systemsteuerung • Startvolume für die künftigen Rechnerstarts fest-gelegt werden. Wenn Sie dagegen nur einmalig von einem anderen Volumebooten wollen, drücken Sie beim Rechnerstart einfach die Taste (C), um voneiner eingelegten CD-ROM zu starten. Wenn Sie stattdessen (±) gedrückt hal-ten, landen Sie im Boot-Manager, der Ihnen alle verfügbaren Systeme zur Aus-wahl anbietet.

Nach der Standardinstallation besitzt Ihr Rechner genau ein Volume mit demNamen »Macintosh HD«. Obwohl Sie diesen Namen jederzeit ändern können,belassen wir es in diesem Buch dabei – mit »Macintosh HD« ist hier immer dasStartvolume gemeint.

Page 28: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen32

Wenn Sie Ihre Festplatte in mehr als ein Volume aufteilen wollen, geht das nur,wenn von dieser Platte gerade kein System gestartet wurde. Entweder partitio-nieren Sie also eine externe FireWire- oder USB-Festplatte, oder Sie teilen diePlatte gleich bei der Installation von Mac OS X passend auf. Das System bringtdafür das Festplatten-Dienstprogramm mit, das Sie am Anfang der Mac OS X-Installation über das Installer-Menü starten können. Später können Sie dasFestplatten-Dienstprogramm jederzeit im Dienstprogramme-Ordner innerhalbdes Programme-Ordners aufrufen.

Abbildung 1.4 Festplatten-Dienstprogramm

Es ist übrigens eine gute Idee, vor jedem Wechsel zu einer neuen Mac OS X-Version die Datei-Zugriffsrechte des Volumes reparieren zu lassen. Einige Pro-gramme bringen diese leider ab und zu durcheinander, und dann geht einUpdate manchmal schief ... Im Festplatten-Dienstprogramm wählen Sie dazudas Startvolume aus und klicken dann auf das Tab »Erste Hilfe«. Dort könnenSie nun »Volume-Zugriffsrechte reparieren« starten.

Wenn Sie sich dafür interessieren, was »unter der Haube« passiert, bringtMac OS X 10.3 auch dazu ein passendes Werkzeug mit. Mit dem ProgrammAktivitäts-Anzeige aus dem Verzeichnis /Programme/Dienstprogramme

Page 29: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

33Den Mac richtig bedienen

1

2

3

4

5

6

7

8

9

10

11

12

13

können Sie sich alle laufenden Prozesse übersichtlich anzeigen lassen, ebensodie Speicherauslastung, Festplattenaktivität usw. Alternativ können Sie sichdiese Informationen im Terminal mit top und ps -x besorgen.1

Abbildung 1.5 Aktivitäts-Anzeige

1 Eine Übersicht über viele weitere Tastenkürzel finden Sie auf der Seite http://www. xshorts.de/.

Hilfe finden

Wenn Sie weitere Hilfe zu Mac OS X benötigen, können Sie über das Finder-Hilfe-Menü die »Mac Hilfe« aufrufen (alternativ drücken Sie einfach(°)+(?)). Während diese – gerade ab Mac OS X 10.3 – für die Anwendungdes Systems oft ausreichende Informationen liefert, enthält sie kaumInformationen zur Software-Entwicklung. Wo Sie diese erhalten, erfahrenSie später in diesem Kapitel (Abschnitte 1.5 und 1.6).

Tastenkürzel Auswirkung

(°)+(A) Alles auswählen

(°)+(C) Markiertes Element in die Zwischenablage kopieren

(°)+(F)/(°)+(G) Suchen/Weitersuchen

Tabelle 1.1 Die wichtigsten Mac OS X-Tastenkürzel1

Page 30: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen34

(°)+(H) Anwendung ausblenden (»Hide«)

(°)+(I) Informationen zum selektierten Element anzeigen

(°)+(M) Fenster ins Dock minimieren

(°)+(N) Neues Dokument öffnen

(°)+(O) Vorhandenes Dokument öffnen (laden)

(°)+(P) Drucken (»Print«)

(°)+(Q) Programm beenden

(°)+(S) Dokument speichern

(ª)+(°)+(S) Sichern unter einem neuen Namen

(°)+(V) Inhalt der Zwischenablage an der Cursorposition einfügen

(°)+(W) Fenster schließen

(°)+(X) Markiertes Element in die Zwischenablage kopieren und danach das markierte Element löschen

(°)+(Z) Letzte Aktion widerrufen (»Undo«)

(°)+(ÿ) Wechsel zwischen laufenden Programmen

(°)+(?) Hilfe

(°)+(,) Einstellungen

(°)+(.) bzw. (Esc) Laufende Aktion oder angezeigten Dialog abbrechen

(±)+(°)+(Esc) Dialog »Programme sofort beenden« öffnen

(vergleichbar mit dem Task Manager unter Windows)

(ª)+(±)+(°)+(Esc) Aktives Programm ohne Nachfrage beenden. Daten werden nicht gesi-chert! Erst ab Mac OS X 10.3

(°)+(æ)

(°)+(Æ)

Zum Zeilenanfang/-ende springen

(±)+(æ)

(±)+(Æ)

Zum vorhergehenden/nächsten Wort springen

(F9) Alle offenen Fenster im Überblick darstellen. Erst ab Mac OS X 10.3

(F10) Alle offenen Fenster der aktiven Applikation im Überblick darstellen. Erst ab Mac OS X 10.3

(F11) Alle Fenster ausblenden, Finder-Desktop anzeigen. Erst ab Mac OS X 10.3

Tastenkürzel Auswirkung

Tabelle 1.1 Die wichtigsten Mac OS X-Tastenkürzel (Forts.)

Page 31: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

35Eingeben, übersetzen, ausführen

1

2

3

4

5

6

7

8

9

10

11

12

13

1.4 Eingeben, übersetzen, ausführen

Nun ist es an der Zeit, Ihr erstes Java-Programm auf dem Mac zu starten! Dazunehmen wir das allseits beliebte »Hallo Welt«-Programm, das eben diesen Textausgibt. Während das Programm technisch nicht sonderlich interessant ist,können Sie mit den Schritten bis zur Ausführung das Java-System vonMac OS X schnell und einfach kennen lernen – nicht nur als Einsteiger, son-dern auch als Java-Profi. Sollten Sie mit dem Quelltext selbst noch Problemehaben, lesen Sie sich bitte im Anhang die Kurzeinführung in die Sprache Javadurch. Es handelt sich dort aber wirklich nur um eine extrem knappe Ein-führung, die Ihnen hilft, wenn Sie eine andere (vorzugsweise objektorientierte)Sprache beherrschen. Zum gründlichen Erlernen von Java sollten Sie zusätzlichein anderes Buch lesen, beispielsweise den »Einstieg in Java« von B. Steppan.

Eine kleine Bemerkung noch vorneweg: Für alle Beispiele und Beschreibungenist mindestens Mac OS X 10.2 Voraussetzung. Screenshots sind in der Regel mitMac OS X 10.3 erstellt. Obwohl die meisten Programme – sofern sie mit Java1.3 auskommen – auch unter Mac OS X 10.1 laufen dürften, ist dieses Systemzu alt und aus heutiger Sicht zu unausgereift, um hier speziell berücksichtigt zuwerden.

Starten Sie den Standard-Texteditor von Mac OS X, TextEdit, der normaler-weise das RTF-Format verwendet, aber ebenso Word-Dokumente laden undspeichern und ganz normale Texte verarbeiten kann. Sie finden den Editor imProgramme-Verzeichnis:

Macintosh HDProgramme

TextEdit

Wenn es der Übersichtlichkeit dient, werden Sie im Folgenden Pfadangabenauch in dieser Form finden, ansonsten wird die Kurzform MacintoshHD/Programme/TextEdit verwendet (oder nur /Programme/TextEdit – wennein UNIX-Pfad mit dem Schrägstrich beginnt, ist damit der Pfad ausgehend vomStartvolume gemeint).

(Ctrl)+ Dialog »Computer jetzt ausschalten?« öffnen. Hier können Sie mit (¢) den Rechner ausschalten, mit (R) (»Reboot«) neu starten und mit (S) (»Sleep«) in den Ruhezustand versetzen. (Esc) bricht den Dialog ab.

(Fn)+(æ_) Entfernen (auf mobilen Rechnern)

Tastenkürzel Auswirkung

Tabelle 1.1 Die wichtigsten Mac OS X-Tastenkürzel (Forts.)

Page 32: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen36

Geben Sie den Programmtext aus Abbildung 1.6 in das leere TextEdit-Fensterein oder laden Sie den Quelltext HalloWelt.java mit dem Menüpunkt Ablage• Öffnen... (bzw. (°)+(O)) aus dem Verzeichnis /examples/ch01/hallo/ vonder Buch-CD. Wenn Sie die Datei laden, erkennt TextEdit automatisch, dass essich um unformatierten Text handelt, ansonsten müssen Sie den Modus mitdem Menüpunkt Format • In reinen Text umwandeln umschalten.

Abbildung 1.6 »Hallo Welt« in TextEdit

Wenn Sie die roten Unterstreichungen stören, die in einem Programmquelltextnichts zu suchen haben, deaktivieren Sie die Rechtschreibprüfung unterBearbeiten • Rechtschreibung • Während der Texteingabe prüfen. DieRechtschreibkontrolle ist ein Systemdienst, den alle Anwendungen – auch Java-Programme! – nutzen können.2

2 smi- und hqx-Dateien sind ältere Mac OS-Formate. Klicken Sie nach dem Herunterladeneinfach doppelt auf das Archiv, dann wird es vom Stuffit Expander, der Mac OS X beiliegt,ausgepackt.

TextEdit ist ein einfacher, aber brauchbarer Editor mit grafischer Benut-zungsoberfläche. Kleinere Programme kann man sicherlich damit tippen,aber ein ausgewachsener Quelltext-Editor ist es definitiv nicht. Als univer-seller Editor wird auf dem Mac gerne BBEdit oder der preiswertere Text-Wrangler von Bare Bones Software eingesetzt. Kostenlos ist BBEdit Liteerhältlich, und obwohl diese Version seit längerem nicht mehr weiterent-wickelt wird, lässt sie sich nach wie vor gut und problemlos verwenden. Siekönnen BBEdit Lite von

http://www.barebones.com/products/bblite/index.shtml

oder direkt von

ftp://ftp.barebones.com/pub/freeware/BBEdit_Lite_612.smi.hqx

herunterladen.2 Im nächsten Kapitel sehen Sie dann weitere und vor allemspezialisiertere Editoren und Entwicklungsumgebungen.

Page 33: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

37Eingeben, übersetzen, ausführen

1

2

3

4

5

6

7

8

9

10

11

12

13

Während Sie tippen, ist Ihnen vielleicht aufgefallen, dass im roten Fenster-Schließ-Knopf oben links ein Punkt angezeigt wird. Dies signalisiert, dass dasDokument verändert wurde und dass beim Schließen des Fensters nun nachge-fragt wird, ob man den Inhalt speichern oder verwerfen möchte.

Speichern Sie den Quelltext nun als HalloWelt.java in Ihrem Benutzer-Ver-zeichnis (Home) ab, am einfachsten mit Ablage • Sichern (oder Ablage •

Sichern unter..., was bei neuen Dokumenten aber auf dasselbe hinaus läuft).Im erscheinenden Sichern-Dialog können Sie mehr Informationen einblenden,indem Sie auf den Knopf mit dem Dreieck (oben rechts) klicken. Das Home-Verzeichnis wird mit Ihrem Kurznamen bezeichnet, hier im Beispiel also»much«, das Sie oben im Popup oder links in der Favoritenleiste auswählen. InAbbildung 1.7 werden die Dateien und Ordner in der Listendarstellung ange-zeigt, die Sie vielleicht von anderen Betriebssystemen in ähnlicher Form ken-nen. Sie können aber mit den beiden Buttons oben links auch zur Spalten-(Browser-)Darstellung umschalten, die von erfahrenen Mac-Anwendern bevor-zugt wird, da sie eine erheblich schnellere Navigation im Dateisystem ermög-licht. Unter Mac OS X 10.2 sieht der Sichern-Dialog ähnlich aus, bietet aberweniger Komfort.

Abbildung 1.7 »Sichern unter...«-Dialog

Wenn Sie aus der UNIX-Welt kommen und Ihnen grafische Oberflächen nurbedingt zusagen, können Sie das Terminal – das Sie in Kürze sehen werden– öffnen und in der Shell vi, emacs oder pico aufrufen.

Page 34: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen38

Beachten Sie, dass der Sichern-Dialog am jeweiligen Textfenster »klebt«.Mac OS X nennt solche Fenster-modalen Dialoge »Sheets«, und diese könnenauch aus Java heraus angesprochen werden.

Das Übersetzen und Ausführen des Programms erledigen Sie nun in der Shellinnerhalb der Terminal-Applikation (auch Kommandozeile oder Eingabeauf-forderung genannt, je nachdem, mit welchem System Sie bisher gearbeitethaben). Starten Sie dazu die Anwendung /Programme/Dienstpro-gramme/Terminal. Es öffnet sich ein Terminal-Fenster mit einer Zeile

[straylight:~] much%

oder

Straylight:~ much$

je nachdem, welche Shell bei Ihnen als Standardshell konfiguriert ist (für dasfolgende Beispiel ist dies egal). Sie sehen den Rechnernamen3, die Tilde ~ sowieden Kurznamen des aktuell angemeldeten Benutzers. Die Tilde bezeichnetunter UNIX das Home-Verzeichnis und kann auch in Pfadangaben als Abkür-zung verwendet werden.

Geben Sie nun den Befehl java -version ein um zu testen, ob die JVM gestar-tet werden kann (und welche Version aktiv ist). Sie sollten dann ungefähr fol-genden Text sehen (die Zahlen können variieren):

java version "1.4.2_05"Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05–141)Java HotSpot(TM) Client VM (build 1.4.2–38, mixed mode)

Mit javac HalloWelt.java starten Sie den Java-Compiler und übersetzendamit den Quelltext in so genannten Java Bytecode, der dann von der Virtual

3 Der Rechnername lautet in diesem Fall »Straylight«. Sie können den Namen Ihres Rech-ners in den Systemeinstellungen unter Sharing • Gerätename konfigurieren.

Wenn Sie einmal Sonderzeichen eingeben möchten, können Sie sich inMac OS X 10.3 eine Tastaturübersicht einblenden lassen. Dazu müssen Siein den Systemeinstellungen unter Landeseinstellungen • Tastaturmenüdas Tastaturmenü in der Menüleiste aktivieren.

Dort können Sie dann auch Tastenkombinationen für bestimmte Sonder-zeichen herausfinden. Die Tilde beispielsweise erhalten Sie, wenn Sie(±)+(N) und danach (_____) drücken.

Page 35: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

39Eingeben, übersetzen, ausführen

1

2

3

4

5

6

7

8

9

10

11

12

13

Machine ausgeführt werden kann. Das Ergebnis sehen Sie mit dem Kommandols -l (etwa »list long«, zeige den Verzeichnisinhalt in ausführlicher Form),dort taucht die Klassendatei HalloWelt.class auf. Wenn Sie stattdessen vonjavac Fehlermeldungen bekommen, haben Sie vermutlich das Programmfalsch abgetippt oder unter einem falschen Namen gespeichert (beachten Siedie Groß-/Kleinschreibung!).

Wenn das Übersetzen geklappt hat, können Sie die class-Datei durch Aufruf derJVM mit dem Befehl java HalloWelt ausführen lassen. Im Terminal solltedann die Zeichenkette »Hallo Welt!« ausgegeben werden. Falls das nicht klappt,haben Sie vermutlich entweder die main-Methode falsch abgetippt oder beimAufruf von java einen falschen Klassennamen angegeben.

Abbildung 1.8 Die tcsh-Shell im Terminal

Wenn Sie die Shell beenden möchten, geben Sie einfach exit ein. Alternativ –und das ist meistens bequemer – schließen Sie einfach das Fenster oder been-den Sie die Terminal-Applikation. Sofern in der Shell nicht noch ein Programmläuft oder mit einer Fehlermeldung wartet, wird die Shell sofort korrekt been-det. Ansonsten werden Sie erst noch gefragt, ob Sie das laufende Programmwirklich terminieren wollen.

bash oder tcsh?

In der UNIX-Welt gibt es einen Glaubenskrieg, wie man ihn sonst nur zwi-schen Windows- und Macintosh-Anwendern bezüglich des »besseren« Sys-tems gewohnt ist. Bei UNIX geht es aber darum, welches die beste Shell ist... Und auch Mac OS X bringt einige davon mit, wie Sie mit cat/etc/shells überprüfen können.

Page 36: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen40

Abbildung 1.9 Terminal-Einstellungen für die tcsh-Shell

Als UNIX-Anwender werden Sie Ihre Shell schon in- und auswendig beherr-schen, aber falls Sie bisher nur mit grafischen Oberflächen zu tun hatten,kommt Ihnen das alles vielleicht etwas kompliziert vor (seien Sie beruhigt,UNIX-Shell-Benutzern geht es mit grafischen Oberflächen meistens genauso ...).Die folgenden Kapitel betrachten vor allem grafische Entwicklungstools, aber eskann nicht schaden, sich etwas genauer mit den diversen Shell-Befehlen (cd, llusw.) zu beschäftigen. Falls Ihnen die kurzen Beispiele in diesem Kapitel nicht

Die bekanntesten sind sicherlich bash und tcsh, die Sie in einer beliebigenShell jederzeit mit /bin/bash bzw. /bin/tcsh aufrufen (und mit exit wie-der verlassen können).

Bis Mac OS X 10.2 war tcsh die Standardshell, und wenn Sie eine Upgrade-Installation auf 10.3 durchgeführt haben, ist das auch nach wie vor sokonfiguriert. Wenn Sie aber Mac OS X 10.3 komplett neu installiert haben,ist nun bash die Standardshell. Da die Beispiele in diesem Buch mit der tcshgezeigt werden (sofern wir später überhaupt noch das Terminal verwenden),möchten Sie vielleicht auch unter 10.3 tcsh als Standardshell einstellen. Dazuhaben Sie zwei Möglichkeiten. Entweder rufen Sie die Terminal-Einstel-lungen auf und geben bei »Befehl ausführen« das Kommando /bin/tcsh ein(siehe Abbildung 1.9). Oder Sie geben in der bash folgende zwei Befehle ein:

export EDITOR=picochsh

Damit können Sie die Standardshell in einer Text-Konfigurationsdateiändern, was dann für Ihr gesamtes Benutzerkonto (und nicht nur für dieTerminal-Applikation) gilt. Profis, die als Editor lieber den vi verwenden,können den ersten Befehl natürlich weglassen (und wer aus Versehen im vi-Editor landet, kommt mit :q wieder raus).

Page 37: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

41Eingeben, übersetzen, ausführen

1

2

3

4

5

6

7

8

9

10

11

12

13

ausreichen, lesen Sie bei Bedarf bitte ein spezialisiertes Buch, z.B. »UNIX fürMac OS X-Anwender« von K. Surendorf.

Die Ausgabe des HalloWelt-Programms wurde direkt im Terminal angezeigt,denn dort hatten Sie das Programm ja auch gestartet. Java-Applikationen, dieaußerhalb einer Shell z.B. mit einem Doppelklick gestartet werden, schickenihre Ausgaben dagegen an die Konsole, die Sie unter /Programme/Dienstpro-gramme/Konsole finden. Wenn Sie Mac OS X 10.3 verwenden, öffnen Sie docheinfach mal ein Finder-Fenster für ihr Home-Verzeichnis. Wenn Sie dort dop-pelt auf HalloWelt.class klicken, wird das Java-Programm gestartet und dieZeichenkette »HalloWelt!« landet in der Konsole. Einzelne Klassen auf diese Artzu starten, funktioniert aber nur, wenn keine benutzerdefinierten Bibliothekenaußerhalb des Klassenpfads verwendet werden.

Abbildung 1.10 Java-Textausgabe in der Konsole

Wenn der Befehl ll nicht gefunden wird, können Sie ihn in der tcsh akti-vieren, indem Sie die folgenden drei Befehle ausführen:

echo "source /usr/share/tcsh/examples/rc" >> ~/.tcshrcecho "source /usr/share/tcsh/examples/login" >> ~/.loginecho "source /usr/share/tcsh/examples/logout" >> ~/.logoutEine ausführlichere Anleitung dazu erhalten Sie mit cat/usr/share/tcsh/examples/README | more (weiterblättern mit (____)).

Die Konsole zeigt auch die so genannten Crash-Logs an, die auf der Festplatteabgelegt werden, falls eine Anwendung abstürzt. Sie finden die Crash-Logs in~/Library/Logs/ im Verzeichnis CrashReporter. Dies betrifft aber eigent-lich nur native Mac-Programme. Die Stack-Traces abstürzender Java-Applika-tionen werden im Terminal oder in der Konsole in console.log ausgegeben.

Page 38: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen42

1.5 Entwicklerwerkzeuge und -dokumentation

Nachdem Sie gerade gesehen haben, dass Java fester Bestandteil der Mac OS X-Standardinstallation ist, sollten Sie nun noch die Apple-Entwicklertools instal-lieren, um Apples Entwicklungsumgebung (Project Builder bis Mac OS X 10.2,Xcode ab 10.3) und alle wichtigen Java-Dokumentationen nutzen zu können.Apples »Developer Tools« tragen seit Mac OS X 10.3 den offiziellen Namen»Xcode Tools« – einen Überblick darüber erhalten Sie auf der Seite http://deve-loper.apple.com/tools/macosxtools.html.

Falls Sie bei der Systeminstallation also noch nicht die Software von der Ent-wickler-CD installiert haben, holen Sie dies nun bitte nach (siehe Abbildung1.11). Wenn Sie gerade einen neuen Rechner mit vorinstalliertem Mac OS Xgekauft haben, bekommen Sie die Entwickler-Tools nicht auf CD mitgeliefert,sondern finden sie auf Ihrer Festplatte im Verzeichnis /Programme/Installer/Developer Tools/. Sie können die Tools auch von Apples ADC-Webseite, die im folgenden Abschnitt vorgestellt wird, herunterladen.

Wenn Sie ein bestimmtes Log-File immer im Blick haben wollen, ohne dasKonsole-Fenster öffnen zu müssen, laden Sie sich doch das GeekTool vonhttp://projects.tynsoe.org/en/geektool/ herunter. Damit können Sie beliebigeTextdateien im Desktop-Hintergrund anzeigen lassen.

Hilfe in der Shell

Sie haben schon kurz das Mac-Hilfesystem kennen gelernt, aber auch in derShell können Sie ein Hilfesystem nutzen, und zwar die UNIX-»man pages«(manual pages, Handbuchseiten). Diese werden mit dem Befehl man aufge-rufen, beispielsweise man javac. Mit den Pfeiltasten bewegen Sie sichzeilenweise im Dokument, mit (____) geht es seitenweise vorwärts und mit(Q) können Sie die Hilfe jederzeit verlassen.

Die Entwicklerwerkzeuge werden auf der ADC-Seite in zwei Varianten ange-boten: einmal als eine einzige Datei, die dann mehrere hundert MByte großist, und einmal in Form von kleineren Segmenten. Wenn Sie letztere Vari-ante wählen, laden Sie alle Segmente herunter und packen Sie sie im selbenVerzeichnis aus – dort sollten sich dann eine dmg- und viele dmgpart-Dateienbefinden. Zum Aktivieren (»mounten«) des kompletten Volumes führen Siedann einfach einen Doppelklick nur auf die dmg-Datei aus.

Page 39: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

43Entwicklerwerkzeuge und -dokumentation

1

2

3

4

5

6

7

8

9

10

11

12

13

Abbildung 1.11 Xcode-Tools installieren

Nach jeder Installation einer neuen Xcode-Version müssen Sie zusätzlich diejeweils aktuellen »Java Developer Tools« installieren, die Sie von der ADC-Webseite herunterladen können. Apple stellt für jede Java-Version ein entspre-chendes Entwicklerpaket bereit – beispielsweise gehört zum »Java 1.4.2Update 1« das Entwicklerpaket »Java 1.4.2 Update 1 Developer Tools.«

Anschließend können Sie die bekannte JDK-API-Dokumentation von Suninstallieren. Apple liefert sie als Archiv mit der Entwicklersoftware mit, Siemüssen zum Auspacken nur noch ein Shell-Skript ausführen. Geben Sie dazubis Xcode 1.2 im Terminal folgenden Befehl ein:

sudo /Developer/Documentation/Java/scripts/unjarJavaDocumentation.sh

Die Entwickler-Software finden Sie nun im Verzeichnis /Developer/, die Java-Dokumentation im Verzeichnis /Developer/Documentation/Java/ (die API-Dokumentation von Sun ist dort im Ordner Reference abgelegt). Ab Xcode 1.5führen Sie stattdessen den Befehl

sudo /Developer/ADC\ Reference\ Library/documentation/Java/scripts/unjarJavaDocumentation.sh

aus, wodurch die Dokumentation im mittlerweile von Apple favorisierten Ver-zeichnis /Developer/ADC Reference Library/documentation/Java ange-legt wird. Wenn Sie die »Java 1.4.2 Update 1 Developer Tools« installierthaben, ist keiner der beiden obigen Befehle nötig, da die Dokumentation dann

Page 40: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen44

bereits komplett ausgepackt wurde – dies ist hoffentlich auch bei den künftigenJava-Entwicklerwerkzeugen der Fall.

Obwohl Sie den Großteil von Apples Entwicklerdokumentation nun bei sichauf der Festplatte im Verzeichnis /Developer/Documentation bzw./Developer/ADC Reference Library finden, wird hier im Buch meistens mitWebadressen auf Apples Online-Dokumentation verwiesen. Zum einen habendamit auch Entwickler auf anderen Plattformen Zugang zur Apple-Dokumen-tation, zum anderen greifen Sie damit immer auf die aktuellsten Informationenzu.

Um die API-Dokumentation bequem zu durchstöbern, eignet sich derJavaBrowser im Verzeichnis /Developer/Applications/Java Tools/, derin Kapitel 8 genauer vorgestellt wird.

1.6 Up to date bleiben

Vielleicht ist Mac OS X 10.3 »Panther« Ihr erster Kontakt mit einem Apple-Rechner und dem aktuellen Apple-Betriebssystem, vielleicht verwenden SieMac OS X aber auch schon seit Version 10.0. So oder so, Sie kennen sicherlichdie Tatsache, dass Software (und damit auch ein Betriebssystem) ab einergewissen Komplexität nie ganz fehlerfrei ist. Außerdem ist Software nie ganz»fertig«, die Entwickler erweitern sie ständig – nach den Anforderungen desMarktes, nach den Wünschen der Anwender, um kompatibel mit einem neuenStandard zu sein.

Dementsprechend stellt auch Apple regelmäßig Aktualisierungen (Updates) fürdas Betriebssystem und die zugehörigen Programme zur Verfügung. Dies kön-nen echte Neuerungen sein, beispielsweise eine neue Java-Version, oder aberFehlerbereinigungen, die aufgedeckte Sicherheitslücken im System schließen.Am einfachsten können Sie solche Updates von der eingebauten Software-Aktualisierung installieren lassen. Öffnen Sie dazu im Apfel-Menü oder untenam Bildschirmrand im Dock die »Systemeinstellungen« und wählen Sie dort»Software-Aktualisierung« aus. Sie können nun konfigurieren, ob das Systemregelmäßig automatisch nach Updates suchen soll, und Sie können die Suchedurch Anklicken von »Jetzt suchen« manuell starten. Wenn die Software-Aktualisierung Updates findet, bekommen Sie diese in einem Dialog angezeigt,wo Sie auswählen können, ob und welche Updates installiert werden sollen.

Ab Mac OS X 10.3 können Sie im Apfel-Menü direkt den Menüpunkt »Soft-ware aktualisieren...« auswählen, dann sucht das System sofort nach verfüg-baren Updates – Sie sparen sich dadurch ein paar Klicks.

Page 41: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

45Up to date bleiben

1

2

3

4

5

6

7

8

9

10

11

12

13

Abbildung 1.12 Mac OS X Software-Aktualisierung

Wenn Sie dagegen lieber die volle Kontrolle über die Downloads der System-Aktualisierungen haben und die Archive dafür manuell herunterladen möchtenoder weitere Informationen dazu benötigen, können Sie aufhttp://www.info.apple.com/ in Apples Support-Datenbank nachsehen. Dies istauch der beste Einstiegspunkt, wenn Sie nicht genau wissen, wo Sie direktInformationen zu bestimmten Apple-Produkten finden können.

Die Aktualisierungen werden also weitestgehend über eine Online-Verbindungins Internet abgewickelt, ebenso stehen dort aktuelle Dokumentationen zurVerfügung (sofern sie sich nicht bereits auf der Festplatte im /Developer-Ver-zeichnis befinden). CD-ROMs mit Software-Updates veröffentlicht Apple nurnoch sehr selten, und bei gedruckten Entwicklerdokumentationen verlässt sichApple mittlerweile komplett auf Fachbuch-Verlage4.

Wenn Sie ein Java-Produkt entwickeln und verkaufen (oder kostenfrei anandere Anwender abgeben), finden Ihre Kunden unter http://www.apple.com/java/ allgemeine Hinweise zu Apples Java-Implementierung. Idealerweisebekommen die Anwender Ihrer Software aber gar nichts davon mit, dass sieein Java-Programm starten. In Kapitel 4, Ausführbare Programme, werden Sie

4 Was einer der Gründe dafür ist, warum Sie dieses Buch aus dem Galileo-Verlag lesen ;-)

Page 42: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grundlagen46

sehen, wie Sie eine Java-Anwendung so »verpacken« können, dass sie wie einenormale Mac-Applikation aussieht. Das Einzige, was reine Anwender tun müs-sen, ist, ab und zu die Software-Aktualisierung zu starten und vorhandeneUpdates installieren zu lassen.

Für Sie als Programmierer dürften Apples Entwicklerseiten deutlich interes-santer sein. Die Einstiegsseite http://developer.apple.com/ fasst die wichtigstenTechnologien zusammen und gibt einen schnellen Überblick über die letztenÄnderungen und Neuerungen. Für die Java-Entwicklung sollten Sie sich dieUnterseite http://developer.apple.com/java/ als Lesezeichen in Ihrem Web-Browser definieren. Hier finden Sie nicht nur die aktuelle Java-Dokumentation,sondern auch Beispielcode und FAQs (Frequently Asked Questions: häufigeFragen und nützliche Antworten).

Damit Entwickler unter sich diskutieren können, hat Apple für Java-Program-mierer die Mailingliste java-dev eingerichtet, zu der Sie sich unterhttp://lists.apple.com/mailman/listinfo/java-dev anmelden können. Obwohl Siehier keinen offiziellen Apple-Support bekommen, lesen und schreiben in derListe auch Apple-Mitarbeiter. Bei dringenden Problemen kann man hier oft-mals schnell Hilfe finden. Aber Achtung, das Niveau der Liste ist recht hoch –Sie sollten sich also mit den grundlegenden Java-Problemen bereits selbstbeschäftigt haben. Listensprache ist Englisch. Wenn Sie ein deutschsprachigesForum bevorzugen und Sie sich mit dem Usenet auskennen, können Sie miteinem Newsreader (z.B. Mozilla5 oder MacSOUP6) in den Gruppennews:de.comp.lang.java und news:de.comp.sys.mac.misc mitdiskutieren, je nach-dem, ob Ihre Frage vor allem Java oder vor allem den Macintosh betrifft.

Die wichtigste Quelle für zukünftige, noch nicht öffentlich verfügbare System-software ist die Apple Developer Connection (ADC). In einem geschütztenBereich können Sie Vorabversionen z.B. von Java-Erweiterungen herunter-laden, um Ihre Software damit zu testen und rechtzeitig daran anzupassen. Umin den geschützten Bereich zu gelangen, benötigen Sie eine ADC-Mitglied-schaft. Drei Stufen werden angeboten: Online, Select und Premier. Währenddie Select- und die Premier-Mitgliedschaft 500 bzw. 3500 US-$ jährlich kosten(und Ihnen dafür auch entsprechende Leistungen und Vergünstigungen bie-ten), ist die Online-Mitgliedschaft kostenlos und reicht zum Herunterladen derwichtigsten Vorabversionen vollkommen aus. Die ADC-Anmeldung und dasLogin in den geschützten Bereich geschieht unter https://connect.apple.com/.

5 Download von http://www.mozilla.org/6 Download von http://home.snafu.de/stk/macsoup/

Page 43: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

47Mac OS X erkennen

1

2

3

4

5

6

7

8

9

10

11

12

13

Abbildung 1.13 Apple Developer Connection (ADC): Anmeldung und Login

Sie kommen nun also problemlos an aktuelle Apple-Informationen heran, esfehlen nur noch die neuesten Informationen zu diesem Buch – denn auch dashier Geschriebene unterliegt mit der Software, die es beschreibt, ständigenÄnderungen. Sollte es also Ergänzungen oder Korrekturen zu diesem Textgeben, finden Sie diese auf http://www.galileocomputing.de/ bei der Beschrei-bung dieses Buches als »BuchUpdate«. Wenn Sie sich bei MyGalileo anmelden,können Sie dieses Buch dort registrieren und haben dann alle Zusatzinforma-tionen im einfachen Überblick.

Die Quelltexte der in diesem Buch vorgestellten Beispiele finden Sie auch unterhttp://www.muchsoft.com/java/ in der jeweils aktuellen (und gegebenenfallsfehlerkorrigierten) Version.

1.7 MacOS X erkennen

Wenn Sie Ihre Java-Applikation für eine bestimmte Plattform optimierenmöchten, müssen Sie entweder für jede Plattform einen speziell angepasstenQuelltext pflegen oder Sie pflegen nur einen einzigen Quelltext, in dem Sie zurLaufzeit feststellen, auf welcher Plattform die Software gerade läuft. Natürlichstellt sich die Frage, warum Sie eine Java-Applikation überhaupt an ein

Page 44: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

1

2

3

4

5

6

7

8

9

10

11

12

A

B

C

D

E

F

G

H

I

7 Grafik und Multimedia

7.1 Java Advanced Imaging (JAI) und Java Image I/O (JIIO) .............................................. 353

7.2 Java 3D ................................................................... 356

7.3 OpenGL/JOGL ........................................................ 358

7.4 Java Media Framework (JMF) ................................. 362

7.5 QuickTime for Java (QTJava) .................................. 365

7.6 Sound/Musik .......................................................... 374

7.7 Drucken .................................................................. 375

7.8 Literatur & Links ..................................................... 380

Page 45: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

353Grafik und Multimedia

1

2

3

4

5

6

7

8

9

10

11

12

13

7 Grafik und Multimedia

»Ich tätowier« dir meinen Namen in allen Farben, in allen Farben/Bemal mich, mach mich bunt/Bemal mich bunt!«(Etwas)

Die Grafikausgabe ist mit der Java-Implementation von Mac OS X im Allgemei-nen kein Problem. Die einfachen java.awt.Graphics-Methoden werdenebenso unterstützt wie Java 2D mit seinem java.awt.Graphics2D-Kontext.Diese Grundlagen werden daher im Folgenden nicht mehr speziell behandelt –bei den Beispielsprogrammen der vorangegangenen Kapitel kamen sie teil-weise schon zum Einsatz. Wenn Sie bei der Java 2D-Ausgabe optische Feinein-stellungen vornehmen wollen, sollten Sie sich im Anhang den Abschnitt »Gra-fikdarstellung« in Kapitel 16, System-Properties, ansehen.

In diesem Kapitel erhalten Sie einen Überblick über spezielle Themen der Gra-fik- und Multimediaverarbeitung. Zunächst werden zwei Standard-Erweite-rungspakete für Bildmanipulation und 3D-Grafik vorgestellt, letzteres wirddann mit der Java-Implementierung des 3D-Standards OpenGL verglichen.Auch für Multimediadaten wird zunächst Suns Java-Standard besprochen,anschließend dann Apples QuickTime-Lösung. Ganz zum Schluss folgen nochHinweise zur Sound-Ausgabe und zu den Druckmöglichkeiten unter Java.

7.1 Java Advanced Imaging (JAI) und Java Image I/O (JIIO)

Die Java Advanced Imaging API stellt im Paket javax.media.jai hochperfor-mante, plattformunabhängige Schnittstellen zur Bildbearbeitung zur Ver-fügung, darunter diverse Bildoperationen wie z.B. Filter. JAI ist für die Bildbe-arbeitung im Netzwerk optimiert, unterstützt viele Bildformate und dieBilddaten können problemlos mit der Java 2D-Ausgabe gemischt werden. Aufder Seite http://java.sun.com/products/java-media/jai/ hat Sun eine Liste derDokumentationen und diverser JAI-Anwendungen zusammengestellt.

Apple hat für Mac OS X 10.3 und Java 1.4 die aktuelle JAI-Version 1.1.2 imple-mentiert, allerdings muss diese separat heruntergeladen und installiert werden.Das Installationspaket für JAI und Java 3D finden Sie auf der Seite http://docs.info.apple.com/article.html?artnum=120289.

Die vielleicht am häufigsten genutzten Klassen von JAI dienen zur schnellenEin- und Ausgabe von Bilddateien (»Image I/O«) und gehören zum Paket

Page 46: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia354

com.sun.media.jai.codec. Wie Sie am Namen unschwer erkennen, ist dieskein Standardpaket, daher sollten Sie den Einsatz bei portablen Programmenvermeiden. Zum Glück gibt es ab Java 1.4 aber portablen Ersatz, die Java ImageI/O API im Paket javax.imageio. Diese Klassen sind fester Bestandteil vomJ2SE 1.4 und werden wie folgt genutzt:

//CD/examples/ch07/imageio/ImageIOTest/ImageIOTest.javaimport java.io.*;import java.net.*;import java.awt.image.*;import javax.imageio.*;//...

try {URL url = new File("galileo_logo.gif").toURI().toURL();BufferedImage img = ImageIO.read( url );if (!ImageIO.write( img, "jpeg", new File("test.jpg") )) {

System.exit(1);}

}catch (Exception e) {

e.printStackTrace();}

Sie rufen also die statischen Methoden read() und write() in der Klassejavax.imageio.ImageIO auf – einfacher geht es kaum. Bei Java 1.4 können Siesich darauf verlassen, dass GIF, JPEG und PNG geladen und JPEG und PNGgespeichert werden können. Unterstützung für weitere Bildformate (z.B. BMP,JPEG2000 und TIFF) erhalten Sie mit den »Java Advanced Imaging Image I/OTools« von der Seite http://java.sun.com/products/java-media/jai/downloads/download-iio.html. Laden Sie dort das Linux-Archiv herunter und packen Sie dasenthaltene Archiv jai_imageio.jar auf den Klassenpfad, z.B. in das Verzeich-nis /Library/Java/Extensions/. Leider hat Apple die nativen JIIO-Codecsnoch nicht implementiert, so dass derzeit nur die portablen, aber relativ lang-samen Java-Routinen verwendet werden.

Für die Ein-/Ausgabe von Bilddaten mit älteren Java-Versionen können SieJIMI (Java Image Management Interface) verwenden, das Sun auf der Seitehttp://java.sun.com/products/jimi/ zum Download anbietet. JIMI unterstütztrecht viele Formate, und vor allem können Sie damit auch PICT-Bilder verarbei-ten. PICT ist ein relativ altes Apple-Bildformat, das sowohl Bitmap- als auchVektordaten speichern kann und das auch von Mac OS X noch verwendet wird.Der Quelltext zum Einlesen einer PICT-Datei ist kurz und übersichtlich:

Page 47: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

355Java Advanced Imaging (JAI) und Java Image I/O (JIIO)

1

2

3

4

5

6

7

8

9

10

11

12

13

import java.io.*;import com.sun.jimi.core.*;//...

InputStream in = new FileInputStream( "mein.pict" );java.awt.Image img =

Jimi.getImage( in, "image/pict", Jimi.VIRTUAL_MEMORY );

Auch wenn der MIME-Typ für das PICT-Format mittlerweile image/x-pictlautet, sollten Sie bei JIMI noch die früher verwendete Zeichenkette angeben.Wenn Sie das Bild aus einer anderen Quelle als einer PICT-Datei einlesen, müs-sen Sie darauf achten, dass vor den eigentlichen Bilddaten ein 512 Bytes langerHeader mit Nullbytes gesendet wird.

Leider besitzt JIMI beim Einlesen von PICTs einige Fehler, so dass PICT-Dateienmit der PackBits-Kompression nicht verwendet werden können. Auch beimSchreiben der Dateien enthält der Originalquelltext Fehler, für die es allerdingsunter http://www.amug.org/~glguerin/other/index.html#PICTWriter eine Kor-rektur gibt. Eine andere Möglichkeit zum Bearbeiten von PICT-Bildern bietetQTJava, das weiter hinten in diesem Kapitel vorgestellt wird.

Wenn Sie Bilder möglichst performant darstellen wollen, sollten Sie dieBilddaten nach dem Laden in ein Format umwandeln, das von der Grafik-hardware ohne großen Aufwand verarbeitet werden kann. Dazu laden Siedas Bild am besten wie oben beschrieben mit ImageIO.read() und gebendie geladene BufferedImage-Referenz img dann in eine optimierte Bitmapaus. Die optimierten Bilddaten lassen Sie dann wie gewohnt innerhalb einerKomponente mit Graphics.drawImage() zeichnen:

import java.awt.*;import java.awt.image.*;//... BufferedImage img = javax.imageio.ImageIO.read( url ); BufferedImage optimiert = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration() .createCompatibleImage( img.getWidth(), img.getHeight() ); optimiert.getGraphics().drawImage( img, 0,0, this );

Page 48: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia356

7.2 Java 3D

Java 3D ist ein Standard-Erweiterungspaket, das im Paket javax.media.j3deine ausgefeilte objektorientierte Schnittstelle für die 3D-Grafik-Programmie-rung anbietet. Natürlich sollten alle Java-Bibliotheken mehr oder wenigerobjektorientiert sein, aber Sie werden im folgenden Abschnitt zu OpenGLsehen, dass es auch Grafikbibliotheken gibt, bei denen Sie sich deutlich mehrmit den Details beschäftigen müssen. Suns Portalseite für Java 3D ist http://java.sun.com/products/java-media/3D/ – etwas versteckt befindet sich dort auchdie Seite http://java.sun.com/products/java-media/3D/collateral/ mit einer aus-führlichen Anleitung und vielen Beispielen.

Java 3D wird von Apple zusammen mit JAI als Installationspaket angeboten,das Sie unter anderem von http://www.apple.com/downloads/macosx/apple/java3dandjavaadvancedimagingupdate.html herunterladen können. Wie bei JAIwird Mac OS X 10.3 mit Java 1.4 unterstützt, die von Apple implementierteJava 3D-Version 1.3.1 ist die derzeit aktuelle.

In der Praxis wird häufig OpenGL als programmiersprachenübergreifenderStandard eingesetzt. Dass man aber auch gut mit Java 3D entwickeln kann,zeigt folgendes Programm, das an ein Beispiel aus der oben erwähnten Java 3D-Anleitung angelehnt ist:

//CD/examples/ch07/java3d/Java3Dtest/Java3Dtest.javaimport java.awt.*;import javax.media.j3d.*;import com.sun.j3d.utils.geometry.ColorCube;import com.sun.j3d.utils.universe.SimpleUniverse;

Die Klassen aus den Unterpaketen von com.sun.j3d gehören zwar nicht direktzum Java 3D-Standard, aber sie werden auch bei der Mac OS X-Implementationmitgeliefert. Sie fassen häufige Anwendungsfälle zusammen und erleichterndie Programmierung mitunter deutlich.

public class Java3DTest extends Frame {public Java3DTest() {

GraphicsConfiguration config =SimpleUniverse.getPreferredConfiguration();

Canvas3D canvas = new Canvas3D( config );this.add( canvas, BorderLayout.CENTER );BranchGroup szene = this.createSceneGraph();szene.compile();SimpleUniverse universe = new SimpleUniverse( canvas );

Page 49: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

357Java 3D

1

2

3

4

5

6

7

8

9

10

11

12

13

universe.getViewingPlatform().setNominalViewingTransform();universe.addBranchGraph( szene );

}

Die Hilfsklasse SimpleUniverse erzeugt zunächst eine passende Standard-Gra-fikkonfiguration, damit Sie sich um die Details nicht kümmern müssen. Damitwird dann ein Canvas3D-Objekt erzeugt, eine Ausgabekomponente für Java3D-Grafik. Als Nächstes wird ein so genannter Szene-Graph zusammengestellt,der die darzustellenden Elemente und deren Transformationen speichert – dieMethode createSceneGraph() müssen Sie selbst implementieren, sie wirdgleich noch ausführlicher vorgestellt. Die Szene wird dann noch kompiliert,damit die Anzeige einigermaßen schnell vonstatten geht. Am Ende wird dannein SimpleUniverse-Objekt erzeugt, das die eigentlichen Ausgaben vornimmtund das dazu sowohl mit dem Canvas3D- als auch mit dem Szene-Objekt ver-knüpft wird. Außerdem wird der Beobachtungspunkt so im Raum verschoben,dass man einen möglichst guten Blick auf die Szene hat.

public BranchGroup createSceneGraph() {BranchGroup szene = new BranchGroup();Transform3D transformation = new Transform3D();transformation.rotX( Math.PI / 4.0 );TransformGroup rotation =

new TransformGroup( transformation );rotation.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);Alpha zeit = new Alpha( –1, 5000 );RotationInterpolator animation =

new RotationInterpolator( zeit, rotation );BoundingSphere bounds = new BoundingSphere();animation.setSchedulingBounds( bounds );rotation.addChild( new ColorCube( 0.4 ) );rotation.addChild( animation );szene.addChild( rotation );return szene;

}//...}

In dieser Methode wird der Szene-Graph zusammengebaut, der als Wurzel einBranchGroup-Objekt besitzt. Die Szene setzt sich nicht nur aus den darzustel-lenden Elementen zusammen, sondern auch aus Transformationen und Anima-tionen. Hier wird zunächst eine 3D-Transformation definiert, die das späterzugeordnete Element um 45 Grad (2π/8) entgegen dem Uhrzeigersinn um die

Page 50: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia358

X-Achse dreht. Dann wird eine zusätzliche TransformationGroup angelegt, diesicherstellt, dass die Werte nach der Transformation wieder in der Gruppegespeichert werden dürfen (ALLOW_TRANSFORM_WRITE).

Für die Animation benötigen Sie eine Alpha-Zeitfunktion. Hier wird eine Funk-tion definiert, die in 5.000 Millisekunden vom Anfang bis zum Ende durchläuftund die dann endlos wieder von vorne startet (das legt die –1 fest). Mit derZeitfunktion und der Rotationstransformation erzeugen Sie nun einRotationInterpolator-Animationsobjekt, dem Sie durch das Bounding-Sphere-Objekt sagen, innerhalb welchen Bereichs die Animation stattfindet(hier im Standardbereich; in einer Kugel mit Radius 1 um den Ursprung).

Endlich wird auch das darzustellende Element erzeugt – ein ColorCube-Objektmit passender Skalierung, das automatisch unterschiedlich eingefärbte Seitenbesitzt. Dieses Würfel-Objekt wird mit den Transformationen in umgekehrterReihenfolge ineinander verschachtelt und schließlich zu der Szene hinzugefügt.

Wenn Sie das Programm nun übersetzen und ausführen, sollten Sie in etwaAbbildung 7.1 sehen. Das Bemerkenswerte dabei ist, dass die Animation nir-gendwo explizit gestartet wird – als Bestandteil der Szene beginnt sie einfachautomatisch, sobald die Szene angezeigt wird.

Abbildung 7.1 Drehender Würfel mit Java 3D

7.3 OpenGL/JOGL

Wenn Ihnen Java 3D schon recht mathematisch und aufwändig erschien, wirdIhnen die OpenGL-API erst recht etwas »roh« vorkommen – die Programmier-schnittstellen sind sehr grundlegend, und es dauert deutlich länger als bei-spielsweise bei Java 3D, bis Sie eine komplexe Szene realisiert haben. Nichts-destotrotz ist OpenGL seit Anfang der 1990er Jahre ein 2D- und 3D-Grafikstandard für viele Plattformen und Programmiersprachen, was vor allem

Page 51: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

359OpenGL/JOGL

1

2

3

4

5

6

7

8

9

10

11

12

13

an der Geschwindigkeit, den guten Optimierungsmöglichkeiten und der vollenKontrolle über viele Details der Darstellung liegt.

OpenGL ist fester Bestandteil von Mac OS X, Sie finden einige Hilfsprogramme(Profiler und ein Konstruktionsprogramm) im Order /Developer/Applications/Graphics Tools/ auf Ihrer Festplatte. Auch aus Java herauskönnen Sie OpenGL nutzen, da diverse Anbindungen entwickelt wurden. Frü-her wurde vor allem GL4Java (http://jausoft.com/gl4java/) eingesetzt, mittler-weile hat sich »JOGL« als Quasi-Standard etabliert. Allgemeine Informationenzu JOGL finden Sie auf der Seite https://jogl.dev.java.net/, die Mac OS X-Portie-rung können Sie als Komplettpaket auch von http://homepage.mac.com/gziemski/projects/ herunterladen.

Die heruntergeladenen Dateien installieren Sie am besten im Verzeichnis/Library/Java/Extensions/. Dort müssen sich mindestens die Bibliothekenjogl.jar und libjogl.jnilib befinden. Wenn Sie auch die drei Demo-JAR-Archive in dieses Verzeichnis kopieren, können Sie mit dem Befehl

java demos.vertexProgRefract.VertexProgRefract

ein schönes Beispiel für die Möglichkeiten von OpenGL starten. Die Beschrei-bungen aller verfügbaren Demoprogramme finden Sie auf der Seite https://jogl-demos.dev.java.net/. Aber wie können Sie nun selber eine kleine JOGL-Anwen-dung schreiben?

//CD/examples/ch07/jogl/JoglTest/JoglTest.javaimport java.awt.*;import net.java.games.jogl.*;public class JoglTest extends Frame implements GLEventListener {

public JoglTest() {super ("JOGL Test");GLCapabilities capabilities = new GLCapabilities();GLCanvas canvas =GLDrawableFactory.getFactory().createGLCanvas(capabilities);

canvas.addGLEventListener(this);this.add( canvas, BorderLayout.CENTER );

}

Das JOGL-Paket net.java.games.jogl deutet schon darauf hin, dass OpenGLhäufig für Spiele verwendet wird, aber auch in Bereichen wie CAD, Simulationund Visualisierung kommt es zum Einsatz. Im Konstruktor erzeugen Siezunächst ein GLCapabilities-Objekt, das die Standardvorgaben für die Gra-fikkonfiguration liefert. Damit lassen Sie dann ein GLCanvas-Objekt gene-rieren, in dem die eigentliche Ausgabe der Grafikelemente stattfindet. Wenn

Page 52: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia360

ein GLCanvas angezeigt wird, meldet er die vier Ereignisse init(), display(),displayChanged() und reshaped() an einen registrierten Listener, daherwird das entsprechende Interface GLEventListener von der Fensterklasseimplementiert.

public void init(GLDrawable drawable) {GL gl = drawable.getGL();gl.glClearColor( 1.0F, 1.0F, 1.0F, 1.0F );gl.glColor3f( 0.0F, 0.0F, 1.0F );

}

Zur Initialisierung setzen Sie die Hintergrundfarbe mit glClearColor() aufWeiß (alle Farbkanäle sowie der Alpha-Kanal werden mit 1.0F auf volleIntensität gebracht) und die Zeichenfarbe mit glColor3f() auf Blau. DieMethoden rufen Sie auf dem GL-Kontext auf – dies ist die grundlegende Schnitt-stelle zu OpenGL mit einer schier unglaublichen Anzahl von Grafikroutinen.

public void display(GLDrawable drawable) {GL gl = drawable.getGL();gl.glClear( GL.GL_COLOR_BUFFER_BIT );gl.glBegin (GL.GL_LINE_LOOP);gl.glVertex2i( 10, 20 );gl.glVertex2i( 80, 10 );gl.glVertex2i( 90, 80 );gl.glVertex2i( 20, 90 );gl.glEnd();

}

Wenn JOGL die display()-Methode aufruft, müssen Sie die Grafikelementedarstellen. Sie könnten die Ausgabe puffern, hier wird aber einfach bei jedemAufruf die komplette Grafik neu gezeichnet. Zwischen glBegin() undglEnd() geben Sie dazu alle nötigen Informationen für das Grafikelement an –in diesem Fall werden Punkte für einen geschlossenen Linienzug (GL_LINE_LOOP) festgelegt. Diese Methode erinnert an die paint()-Methode und denGraphics-Kontext von AWT-Komponenten.

public void reshape(GLDrawable drawable,int x, int y, int width, int height) {

GL gl = drawable.getGL();GLU glu = drawable.getGLU();gl.glViewport( 0, 0, width, height );gl.glMatrixMode( GL.GL_PROJECTION );

Page 53: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

361OpenGL/JOGL

1

2

3

4

5

6

7

8

9

10

11

12

13

gl.glLoadIdentity();glu.gluOrtho2D( 0.0, 100.0, 0.0, 100.0 );

}

Wenn sich die Größe des GLCanvas-Objektes verändert, weil beispielsweisedas Fenster breiter oder schmaler gemacht wurde, ruft JOGL die Methodereshape() auf. glViewport() setzt den Ausgabebereich auf die neue Breiteund Höhe. Die Methode gluOrtho2D(), die zu den OpenGL-Hilfsroutinengehört, legt das 2D-Koordinatensystem auf jeder Achse auf den Bereich 0 bis100 fest.

public void displayChanged(GLDrawable drawable,boolean modeChanged,boolean deviceChanged) { }

Mit displayChanged() kann JOGL signalisieren, dass sich die Konfigurationdes Ausgabegeräts verändert hat, beispielsweise die Farbtiefe oder die Bild-schirmauflösung. Allerdings ist diese Funktionalität derzeit nicht in JOGLimplementiert.

Abbildung 7.2 2D-Ausgabe mit OpenGL bzw. JOGL

Wenn Sie das Programm ausführen, sehen Sie ein Viereck, das sich durch die inreshape() definierten Matrix-Transformationen automatisch an die Größe desFensters anpasst (siehe Abbildung 7.2). Alles in allem haben Sie – verglichenmit Java 3D – bei JOGL mehr Aufwand für weniger »Effekte« getrieben, abergerade wenn Sie Spiele oder andere zeitkritische grafische Anwendungenschreiben wollen, lohnt sich der Aufwand meistens. Weitere JOGL-Einführun-gen finden Sie zahlreich im Internet, unter anderem auf den Seiten http://today.java.net/pub/a/today/2003/09/11/jogl2d.html, http://today.java.net/pub/a/today/2004/03/18/jogl-2d-animation.html und http://www.genedavissoftware.com/books/jogl/.

Page 54: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia362

7.4 Java Media Framework (JMF)

Mit dem Java Media Framework aus dem Standard-Erweiterungspaketjavax.media können Sie Audio-, Video- und andere zeitbasierte Mediendatenin Ihre Java-Applikationen integrieren. Die auf der Seite http://java.sun.com/products/java-media/jmf/ beschriebenen Eigenschaften lesen sich gut, und dieListe der unterstützten Formate erscheint ausreichend lang. Leider jedoch kön-nen bei weitem nicht alle der verfügbaren AVI-, MPEG- und QuickTime-Dateien dekodiert werden, weshalb oft lieber das im folgenden Abschnitt vor-gestellte QuickTime for Java verwendet wird. Dennoch bietet JMF einenunschlagbaren Vorteil: Es kann portabel auf jeder J2SE-Implementation ein-gesetzt werden.

Die aktuelle JMF-Version 2.1.1e können Sie von der Seite http://java.sun.com/products/java-media/jmf/2.1.1/download.html herunterladen. Für Mac OS Xmüssen Sie das »Cross-platform Java«-Archiv verwenden, es steht leider kein»Performance Pack« wie für andere Systeme zur Verfügung. Wenn Sie den aus-gepackten Ordner in Ihr Benutzerverzeichnis legen, können Sie mit den Befeh-len

setenv JMFHOME ~/JMF-2.1.1ejava -classspath $JMFHOME/lib/jmf.jar JMFRegistry

testen, ob die JMF-Installation auf Ihrem Rechner läuft. Es erscheint der »JMFRegistry Editor« (siehe Abbildung 7.3), mit dem Sie unter anderem die instal-lierten Format-Module verwalten können.

Abbildung 7.3 Registry Editor zur Konfiguration vom JMF

Für die einfachere Verwendung in Ihren Applikationen kopieren Sie aber ambesten das Archiv jmf.jar in das Verzeichnis /Library/Java/Extensions/

Page 55: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

363Java Media Framework (JMF)

1

2

3

4

5

6

7

8

9

10

11

12

13

(oder Sie packen das Archiv in das jeweilige Programmpaket). Damit könnenSie dann das folgende Beispiel starten, ein einfaches Abspielprogramm sowohlfür Video- als auch für Audiodaten:

//CD/examples/ch07/jmf/SimpleJMFPlayer/SimpleJMFPlayer.javaimport java.awt.*;import java.awt.event.*;import java.net.*;import javax.media.*;public class SimpleJMFPlayer extends Frame

implements ControllerListener, WindowListener {private Player player = null;private Component visualComponent = null;private Component controlComponent = null;

Zunächst benötigen Sie ein Player-Objekt, das das Abspielen im Hintergrundsteuert. Von diesem Objekt können Sie dann zwei Komponenten erfragen, diein die Benutzungsoberfläche integriert werden: Eine, die den Film selbstanzeigt, und eine für die Elemente, mit denen der Anwender den Film startenund stoppen kann. Die Kommunikation zwischen dem Player und der Ober-fläche erfolgt über die im Interface ControllerListener definierte MethodecontrollerUpdate().

public SimpleJMFPlayer(URL url) {try {

player = Manager.createPlayer( url );player.addControllerListener(this);player.start();

}catch (Exception e) {

e.printStackTrace();}this.addWindowListener(this);

}

Der Konstruktor lässt am Anfang das nötige Player-Objekt erzeugen, wobeidie URL der abzuspielenden Daten übergeben wird. Danach wird das Fenster-Objekt als Listener am Player registriert und die Wiedergabe gestartet. Hierfehlt zunächst noch die Verknüpfung mit der Oberfläche, diese wird in der fol-genden Methode hergestellt.

public synchronized void controllerUpdate(ControllerEvent event) {

Page 56: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia364

if (player == null) return;if (event instanceof RealizeCompleteEvent) {

visualComponent = player.getVisualComponent();controlComponent = player.getControlPanelComponent();if (visualComponent != null) {

this.add( visualComponent, BorderLayout.CENTER );}if (controlComponent != null) {

this.add( controlComponent, BorderLayout.SOUTH );}this.invalidate();this.pack();

}else if (event instanceof EndOfMediaEvent) {

player.setMediaTime( new Time(0) );}

}

Für die verschiedenen Ereignisse (Fertig zur Anzeige, Ende der Wiedergabeusw.) ruft JMF die Methode controllerUpdate() auf und übergibt als Para-meter geeignete ControllerEvent-Unterklassen. Am interessantesten ist derRealizeCompleteEvent, mit dem Sie aufgefordert werden, die Abspielkompo-nenten in die Oberfläche zu integrieren. Dazu fragen Sie die beiden Kompo-nenten mit getVisualComponent() und getControlPanelComponent() ab,fügen sie zum Frame hinzu und und lassen das Layout neu validieren – fertig.

Der zweite gezeigte EndOfMediaEvent tritt beim Ende der Wiedergabe auf.Hier wird in diesem Fall einfach nur der Film ganz »zurückgespult«, indem dieWiedergabezeit auf Null gesetzt wird.

public void stop() {if (player != null) {

player.stop();player.deallocate();

}}

Wenn die Wiedergabe von außen abbrechbar sein soll, können Sie diesestop()-Methode zur Verfügung stellen. Dabei sollten Sie nicht nur das Player-Objekt stoppen, sondern mit deallocate() auch nicht mehr benötigten Spei-cher sofort freigeben.

Page 57: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

365QuickTime for Java (QTJava)

1

2

3

4

5

6

7

8

9

10

11

12

13

Bevor das Programm beendet wird, rufen Sie close() auf, wodurch dasPlayer-Objekt interne Aufräumarbeiten durchführen kann:

public void windowClosing(WindowEvent e) {if (player != null) {

this.stop();player.close();

}this.setVisible(false);this.dispose();System.exit(0);

}//...}

Nun können Sie das Abspielprogramm starten, und in dem Fenster wird nichtnur der Film an sich angezeigt, sondern auch die Steuerungselemente (sieheAbbildung 7.4) – beides hatten Sie ja in der Methode controllerUpdate()zum Frame-Layout hinzugefügt.

Abbildung 7.4 JMF spielt einen QuickTime-Film ab.

Um das Problem der schlecht unterstützten Medienformate zu umgehen,beschreibt der Artikel http://www.onjava.com/pub/a/onjava/2002/12/23/jmf.html die interessante Möglichkeit, QuickTime als JMF-Plugin für die Kodie-rungen und Dekodierungen zu verwenden. Wenn Sie allerdings für Ihre Filmedie Standard-JMF-API nur zusammen mit einer systemabhängigen Bibliotheknutzen können, können Sie auch gleich QuickTime verwenden.

7.5 QuickTime for Java (QTJava)

QuickTime (QT) ist wohl eine der ältesten und ausgereiftesten Multimedia-bibliotheken, die es gibt. Seit Anfang der 1990er Jahre steht die Software fürMac OS und Windows zur Verfügung1, und bei Mac OS X ist sie fester Bestand-

1 Siehe http://david.egbert.name/work/newmedia/quicktime/history/

Page 58: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia366

teil seit der ersten Version dieses Betriebssystems. Am bekanntesten ist Quick-Time sicherlich dafür, Filmdateien abzuspielen (beispielsweise im QuickTime-eigenen *.mov-Format), aber es eignet sich genauso gut dazu, Musikdateienanzuhören, Bilddateien zu betrachten und zwischen einer Vielzahl von Forma-ten zu konvertieren, Audio- und Videodaten als Echtzeit-Datenstrom zu emp-fangen sowie 3D- und Virtual-Reality-Modelle zu bearbeiten. Mittlerweile istQuickTime bei Version 6.5 angekommen, das aktuellste Installationspaketkönnen Sie von der Seite http://www.apple.com/quicktime/download/ herunter-laden. Die Abspielsoftware QuickTime Player finden Sie im Verzeichnis/Programme/, die Konfiguration nehmen Sie über Systemeinstellungen •

QuickTime vor.

Seit 1998 (damals war QuickTime 3.0 aktuell) gibt es eine Java-Schnittstelle zudieser Technologie. Apple stellt mit »QuickTime for Java«, kurz »QTJava« oder»QTJ«, eine objektorientierte Zugriffsschicht auf die darunter liegende, proze-durale Programmierschnittstelle zur Verfügung. QTJava ist also kein reines Javaund damit eigentlich nicht plattformunabhängig. Wenn Sie aber als Zielplatt-formen Mac OS (X) und Windows voraussetzen können, ist QuickTime die bes-sere Wahl gegenüber dem Java Media Framework, denn die Funktionalität unddie Anzahl der unterstützten Formate sind deutlich höher. Linux-Anwenderbleiben bei QuickTime derzeit leider komplett außen vor.

Mit QuickTime 6.4 hat Apple eine Veränderung an den QTJava-APIs vor-genommen, um die Schnittstellen zu vereinfachen und an Java 1.4 anzupassen– vieles, was QTJava vor einigen Jahren noch selbst mitbringen musste, istmittlerweile Bestandteil der Standard-Klassenbibliothek. Insofern ist eine sol-che Schlankheitskur eigentlich zu begrüßen. Leider jedoch wurden die betref-fenden Klassen und Methoden nicht nur einfach als veraltet (»deprecated«)markiert, einige wichtige alte Routinen verweigern nun mit Java 1.4 komplettihren Dienst. Dies betrifft vor allem die Klassen aus dem Paket quicktime.app.display, die durch andere Klassen im Paket quicktime.app.view ersetztwurden. Nahezu alle Java-Quelltexte müssen daran angepasst werden, wenndie Anwendungen auch mit einer aktuellen QuickTime-Version und Java 1.4laufen sollen. Dass Sie QuickTime 6.4 benötigen, damit Java 1.4 unterstütztwird, betrifft übrigens nur Mac OS X – die Windows-Variante von QTJavakommt bereits seit QuickTime 6.0 mit dem JDK 1.4 klar.

Die Versionsnummern von QuickTime und von QTJava werden nicht synchronhochgezählt, auch wenn QTJava oft zusammen mit einer neuen QuickTime-Version aktualisiert wird. Zu QuickTime 6.4 und 6.5 gehört beispielsweiseQTJava 6.1, zu QuickTime 6.3 die QTJava-Version 6.0. Die nötigen Java-Biblio-theken werden normalerweise vom QuickTime-Installationsprogramm auf die

Page 59: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

367QuickTime for Java (QTJava)

1

2

3

4

5

6

7

8

9

10

11

12

13

Festplatte geschrieben. Einzige Ausnahme ist Mac OS X 10.2 – dort müssen Siebei QuickTime 6.4 die Software-Aktualisierung bemühen, um QTJava nachträg-lich zu installieren.

Apples Portalseite für QTJava ist http://developer.apple.com/quicktime/qtjava/.Passen Sie aber auf, welche der Informationen Sie von dort verwenden, dennteilweise wurden die Texte noch nicht an Mac OS X angepasst. Am bestenladen Sie sich zunächst die Javadoc-Dokumentation von der Seite http://develo-per.apple.com/quicktime/qtjava/javadocs.html herunter. Sie finden dort zweiVersionen, QTJava 6.0 und QTJava 6.1. Da noch viele Quelltexte für die ältereQTJava-Version programmiert sind, wird im folgenden Beispiel ein einfacherFilm-Abspieler für QTJava 6.0 entwickelt. Beachten Sie aber, dass Sie das Pro-gramm unter Mac OS X dann zwingend mit Java 1.3 ausführen müssen, sonsterhalten Sie Laufzeit-Fehlermeldungen.

7.5.1 QTJava 6.0 (QuickTime bis Version 6.3)

//CD/examples/ch07/qtjava/QTJava60Player/QTJava60Player.javaimport java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import quicktime.*;import quicktime.app.display.*;import quicktime.app.QTFactory;import quicktime.app.image.ImageDrawer;

Neben den typischen import-Anweisungen für eine AWT-Applikation mitDatei- und Netzwerkzugriffen wird vor allem das Paket quicktime mit einigenUnterpaketen eingebunden.

public class QTJava60Player extends Frame implements WindowListener {private Drawable myQTContent = null;private QTCanvas myQTCanvas = null;

Jedes QTJava60Player-Fenster hält zwei Referenzen. Das Drawable-Objektverwaltet die darzustellenden Daten, beispielsweise einen Film. Der QTCanvasist eine ganz gewöhnliche AWT-Komponente, mit der das Drawable-Objektdann innerhalb der Benutzungsoberfläche angezeigt wird.

public QTJava60Player(String url) {try {

QTSession.open();

Page 60: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia368

myQTCanvas =new QTCanvas( QTCanvas.kInitialSize, 0.5F, 0.5F );

this.add ( myQTCanvas, BorderLayout.CENTER );myQTContent = QTFactory.makeDrawable( url );

}

Bevor Sie irgendwelche QTJava-Objekte anlegen, müssen Sie zur Initialisierungvon QuickTime ganz zu Anfang QTSession.open() aufrufen. Danach wird dieQTCanvas-Komponente erzeugt, die dann in den Frame eingefügt wird. MitkInitialSize wird die anfängliche Größe festgelegt, die beiden 0.5-Wertezentrieren den Film horizontal und vertikal innerhalb der Komponente.Schließlich wird mit QTFactory.makeDrawable() aus einer beliebigen URLein darstellbares Multimedia-Objekt erzeugt. Was hier noch fehlt, ist die Ver-knüpfung zwischen dem QTCanvas und dem Drawable-Objekt.

catch (QTException e) {if (QTSession.isInitialized()) {

myQTContent = ImageDrawer.getQTLogo();}else {

throw new RuntimeException( e.getMessage() );}

}

Aber zunächst prüfen Sie, ob ein Fehler aufgetreten ist. Wenn die QTSessioninitialisiert ist, wurde eventuell die Filmdatei nicht gefunden oder der Inhalt istdefekt. In diesem Fall wird einfach das QuickTime-Logo angezeigt, das sich miteiner ImageDrawer-Methode anfragen lässt. Ansonsten wird das Programm miteiner Fehlermeldung beendet.

if (myQTCanvas != null) {try {

myQTCanvas.setClient( myQTContent, true );}catch (QTException e) {

throw new RuntimeException( e.getMessage() );}

}this.addWindowListener(this);

}

Konnte QuickTime initialisiert und das QTCanvas-Objekt erzeugt werden,sagen Sie dem QTCanvas-Objekt nun mittels setClient(), welche Multi-

Page 61: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

369QuickTime for Java (QTJava)

1

2

3

4

5

6

7

8

9

10

11

12

13

mediadaten in der Komponente angezeigt werden sollen. Der true-Parameterbewirkt, dass das Layout der AWT-Komponente mit den gesetzten Client-Datenneu berechnet wird.

Damit kann Ihr Frame bereits einen QuickTime-Film abspielen! Es bedarf kei-ner speziellen Methoden-Aufrufe zum Starten der Wiedergabe – sobald derQTCanvas angezeigt wird, werden auch automatisch verwaltete Steuerungsele-mente dargestellt, mit denen der Anwender das Abspielen kontrollieren kann.Was nun noch folgt, ist Code zum korrekten Beenden der Wiedergabe.

public void stop() {if (myQTCanvas != null) {

myQTCanvas.removeClient();myQTCanvas = null;

}}

Die Methode stop() kann von außen aufgerufen werden, wenn die Wieder-gabe abgebrochen werden soll – beispielsweise weil der Anwender einen ent-sprechenden Knopf angeklickt hat oder weil ein Applet-Dokument geschlossenwird. Dazu wird einfach die Verbindung zwischen dem QTCanvas und denClient-Daten mit der Methode removeClient() aufgelöst.

public void windowClosing(WindowEvent e) {this.stop();QTSession.close();this.setVisible(false);this.dispose();System.exit(0);

}//...}

Spätestens wenn Ihre Applikation beendet wird, sollten Sie die QTSessionschließen, damit QuickTime Aufräumarbeiten durchführen kann. Anschlie-ßend können Sie dann – wie hier geschehen – das Fenster schließen und dasProgramm beenden.

Damit Sie das Programm kompilieren können, müssen Sie noch die QTJava-Klassen zum Suchpfad hinzufügen. In Xcode tragen Sie dazu das Archiv/System/Library/Java/Extensions/QTJava.zip in den Target-Einstel-lungen unter Search Paths • Java Classes ein (siehe Abbildung 7.5). Zum Aus-führen müssen Sie dieses ZIP-Archiv später dann nicht mehr extra angeben, daes sich in einem der Standard-Erweiterungsverzeichnisse befindet.

Page 62: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia370

Abbildung 7.5 QTJava-Klassen zum Suchpfad hinzufügen

Vor dem Ausführen müssen Sie noch sicherstellen, dass die richtige Java-Version gestartet wird. Dazu ändern Sie beim Executable »java« den Programm-pfad unter »Path to Executable« auf /System/Library/Frameworks/JavaVM.framework/Versions/1.3.1/Commands/java (siehe Abbildung 7.6).

Abbildung 7.6 QTJava 6.0 mit Java 1.3 ausführen

Wenn Sie das Programm nun übersetzen und starten, öffnet sich ein Fenster, indem neben dem Medien-Ausgabebereich automatisch auch eine Steuerungs-leiste eingeblendet wird (siehe Abbildung 7.7). Mit dem Dreieck-Knopf kön-nen Sie die Wiedergabe starten (und auch wieder anhalten) – um die korrekteBehandlung der entsprechenden Ereignisse kümmert sich QTJava.

Da Sie hier mit veralteten Schnittstellen arbeiten, sollten Sie in den Xcode-Target-Einstellungen unter »Java Compiler Settings« den Eintrag »Showusage of deprecated API« aktivieren. So zeigt Ihnen Xcode nach dem Über-setzen neben dem Quelltext, welche Stellen kritisch für die Aufwärtskompa-tibilität sind. Wenn Sie javac direkt aufrufen, können Sie dafür die Option-deprecation setzen.

Sie werden sehen, dass Sie das Interface quicktime.app.display.Drawable, die Klasse quicktime.app.QTFactory und vor allem die Klassequicktime.app.display.QTCanvas bei neuen Projekten nicht mehr ein-setzen sollten. Geeigneter Ersatz wird Ihnen im folgenden Abschnitt vorge-stellt.

Page 63: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

371QuickTime for Java (QTJava)

1

2

3

4

5

6

7

8

9

10

11

12

13

Abbildung 7.7 Filme mit QTJava 6.0 abspielen

7.5.2 QTJava 6.1 (QuickTime ab Version 6.4)

Um ein solches Abspielprogramm mit dem aktuellen QTJava 6.1 zu realisieren,müssen Sie vor allem den Konstruktor der Klasse anpassen – hier wird ja dasFilm-Objekt erzeugt und in die Oberfläche eingebunden. Wenn Sie Java 1.4verwenden, sind diese Änderungen zwingend. Und da die vorgestellten Klas-sen auch mit Java 1.3 funktionieren, sollten Neuentwicklungen immer wiefolgt aufgebaut sein:

//CD/examples/ch07/qtjava/QTJava61Player/QTJava61Player.javaimport java.awt.*;import java.awt.event.*;import java.net.*;import quicktime.*;import quicktime.app.view.*;import quicktime.std.*;import quicktime.std.movies.*;import quicktime.std.movies.media.DataRef;

Es werden die typischen Pakete eingebunden, dazu das QTJava 6.1-Paketquicktime.app.view sowie das ältere (aber immer noch gültige) Paketquicktime.std für diverse Konstanten.

public QTJava61Player(String url) {try {

QTSession.open();DataRef ref = new DataRef( url );Movie movie =

Movie.fromDataRef( ref,

Page 64: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia372

StdQTConstants4.newMovieAsyncOK |StdQTConstants.newMovieActive );

MovieController ctrl =new MovieController( movie );

QTComponent component =QTFactory.makeQTComponent( ctrl );

this.add ( component.asComponent(),BorderLayout.CENTER );

}catch (QTException e) { /* ... */ }this.addWindowListener(this);

}

Auch mit dem aktuellen QTJava muss zunächst eine QTSession geöffnet wer-den, um QuickTime zu initialisieren. Anschließend wird aus der übergebenenURL ein DataRef-Objekt erzeugt, mit dem in QuickTime die unterschiedlichs-ten Datenquellen referenziert werden.

Mit der erhaltenen Daten-Referenz können Sie nun ein Movie-Objekt gene-rieren lassen. Dazu übergeben Sie die Referenz sowie ein paar von Appleempfohlene Konstanten an Movie.fromDataRef(). Das Movie-Objekt alleinebietet zu wenig Funktionalität zum Abspielen, daher verpacken Sie es in einemMovieController. Aus diesem Steuerungsobjekt können Sie dann schließlichmit QTFactory.makeQTComponent() eine Komponente für die Benutzungs-oberfläche erzeugen lassen.

Diese Komponente fügen Sie dann in die Oberfläche ein. Da makeQT-Component() eine quicktime.app.view.QTComponent-Referenz zurückgibt,müssen Sie das Objekt dafür entweder in eine java.awt.Component umwan-deln (casten) oder – besser – eine passende Referenz mit asComponent() erfra-gen.

Achtung: DataRef kommt mit den aus einem File-Objekt erzeugten URL-Zeichenketten nicht zurecht. Um Dateien zu referenzieren, müssen Sie diefile://-URLs für den DataRef-Konstruktor von Hand zusammenbauen.

Beachten Sie, dass es sich hier um die Klasse quicktime.app.view.QTFactory handelt und nicht um die gleichnamige, aber veraltete Klasse ausdem Paket quicktime.app!

Page 65: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

373QuickTime for Java (QTJava)

1

2

3

4

5

6

7

8

9

10

11

12

13

Wenn Sie sich die quicktime.std.movies.MovieController-Referenz alsObjektvariable merken, können Sie das Abspielen außerhalb des Konstruktorsbeeinflussen. Beispielsweise können Sie der Methode play() einen Parameterfür die Abspielgeschwindigkeit übergeben – mit 1.0F wird der Film in norma-ler Geschwindigkeit angezeigt, mit 0.0F wird der Film angehalten.

In der windowClosing()-Listener-Methode bleibt alles beim Alten: Unmittel-bar vor dem Programmende wird die QTSession geschlossen:

public void windowClosing(WindowEvent e) {QTSession.close();this.setVisible(false);this.dispose();System.exit(0);

}// ...}

Die Programmierung mit QTJava 6.1 erfordert also minimal mehr Aufwand alsmit Version 6.0. Dafür funktioniert die Lösung sowohl mit Java 1.3 als auch mitJava 1.4 – und für die flexiblen Steuerungsmöglichkeiten mit demMovieController müssten Sie bei QTJava 6.0 sowieso denselben Aufwandbetreiben.

Wenn Sie sich weitere Beispiele zu QTJava ansehen möchten, finden Sie aufhttp://developer.apple.com/samplecode/Java/idxQuickTime-date.html eine Listemit Archiven zu diversen Themen. Aber Achtung: Die meisten davon laufennur mit QTJava 6.0, Apple hat sie leider noch nicht an QTJava 6.1 angepasst.Von der Seite http://developer.apple.com/sdk/qtjavasdk.html können Sie einQTJava-Entwicklungspaket (SDK) herunterladen, das alle diese Beispiele unddie API-Dokumentation enthält – allerdings nur für Windows. Um die Situ-ation für QTJava-Programmierer zu verbessern, hat sich gerade die Netz-gemeinschaft »OpenQTJ« gegründet, die auf der Seite https://open-qtj.dev.java.net/ aktualisierte Beispiele, Anleitungen und Hilfestellungen beiProblemen anbietet.

QuickTime bietet auch vielfältige Im- und Exportmöglichkeiten. Beispiels-weise können Sie folgenden QTJava-Quelltext verwenden, um eine Bild-datei im Apple-eigenen PICT-Format in das JPEG-Format umzuwandeln:

import quicktime.io.QTFile;import quicktime.qd.Pict;

Page 66: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia374

7.6 Sound/Musik

Zum Abspielen von Musik, beispielsweise im MP3-Format, setzen Sie am bes-ten QuickTime for Java ein, wie es im vorangegangenen Abschnitt beschriebenwurde. Ob ein Film oder eine Sounddatei abgespielt wird, ändert an derQTJava-Programmstruktur nichts. Wenn Sie auf MP3-Dateien verzichten, kön-nen Sie alternativ auch das Java Media Framework verwenden.

Speziell zur Sound-Verarbeitung hat Sun die Java Sound API (JavaSound) ent-worfen, siehe http://java.sun.com/products/java-media/sound/. Diese portablen

import quicktime.std.image.GraphicsExporter;import quicktime.util.QTUtils;//... Pict p = Pict.fromFile( new java.io.File("mein.pict") ); GraphicsExporter export = new GraphicsExporter( QTUtils.toOSType("JPEG") ); export.setInputPicture( p ); QTFile out = new QTFile( "mein.jpg" ); export.setOuputFile( out ); export.doExport();

Wenn Sie das PICT-Bild innerhalb des Java-Programms weiterverarbeitenmöchten, können Sie vom QuickTime-GraphicsImporter ein Image-Objekterzeugen lassen:

import java.awt.*;import quicktime.app.view.*;import quicktime.io.QTFile;import quicktime.qd.QDRect;import quicktime.std.image.GraphicsImporter;// ... GraphicsImporter import = new GraphicsImporter( QTUtils.toOSType("PICT") ); import.setDataFile( new QTFile("mein.pict") ); QDRect rect = import.getNaturalBounds(); GraphicsImporterDrawer drawer = new GraphicsImporterDrawer( import ); QTImageProducer producer = new QTImageProducer( drawer, new Dimension( rect.getWidth(), rect.getHeight() ) ); Image img = Toolkit.getDefaultToolkit().createImage( producer );

Page 67: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

375Drucken

1

2

3

4

5

6

7

8

9

10

11

12

13

Klassen stehen seit Java 1.3 im Paket javax.sound zur Verfügung – beachtenSie aber, dass die Audio-Eingaberoutinen beim Mac OS X-Java erst ab Java 1.4implementiert sind. Und auch in Java 1.4 kommen für die Eingabe nurbestimmte Werte in Frage (44,1 kHz Sample-Frequenz, PCM-Kodierung, monooder stereo, 8- oder 16-Bit-Samples). Liegt die Audio-Eingabedatei in einemanderen Format vor, müssen Sie sie vor der Verwendung passend umwandeln.

Was mit JavaSound unter Mac OS X leider überhaupt nicht funktioniert, ist dieAnsteuerung von MIDI-Geräten. Sollten Sie dies benötigen, müssen Sie dasMac OS X-spezifische CoreAudio-Framework einsetzen, für das Apple Java-Hüllklassen bereitstellt. Die Klassen sind im Archiv /System/Library/Java/Extensions/CoreAudio.jar gespeichert und gehören zum Paket com.apple.audio (bzw. zu diversen Unterpaketen davon). Eine Übersicht über CoreAudiofinden Sie auf den Seiten http://developer.apple.com/audio/coreaudio.html undhttp://developer.apple.com/documentation/MusicAudio/Reference/CoreAudio/, dieAPI-Dokumentation der Java-Klassen liegt auf Ihrer Festplatte im Verzeichnis /Developer/Documentation/CoreAudio/Java/. Allerdings ist die Java-Dokumentation mehr als dürftig, und die Klassen wurden längere Zeit nichtweiterentwickelt. Insofern sollten Sie nach Möglichkeit auch hier QTJava ein-setzen, das zudem wenigstens zwischen Windows und Mac OS X portabel ist.

7.7 Drucken

Die schlechte Nachricht zuerst: Die Java 1.4-Druck-API im Paket javax.printist derzeit unter Mac OS X nicht nutzbar – Apple hat sie einfach noch nicht voll-ständig implementiert. Die gute Nachricht: Alle früheren Druck-APIs in denPaketen java.awt und java.awt.print sind voll funktional und können auchmit Java 1.4 genutzt werden. Falls Sie dennoch eine javax.print-ähnlicheSchnittstelle benötigen, empfiehlt Apple, bis auf weiteres auf »J2PrinterWorks«von http://www.wildcrest.com/ zurückzugreifen.

Damit Sie einen Eindruck bekommen, wie Mac OS X die vorhandenen Druck-Schnittstellen umsetzt, folgen zwei kurze Beispiele. Zunächst wird diejava.awt-Druck-API vorgestellt, die mit Java 1.1 eingeführt und mit Java 1.3erweitert wurde:

//CD/examples/ch07/print/Print11/Print11.javaimport java.awt.*;public class Print11 extends Frame {

public void print() {JobAttributes jobAttr = new JobAttributes();PageAttributes pageAttr = new PageAttributes();

Page 68: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia376

jobAttr.setDialog( JobAttributes.DialogType.NATIVE );pageAttr.setColor( PageAttributes.ColorType.MONOCHROME );

PrintJob job = this.getToolkit().getPrintJob( this,"Java 1.1/1.3 DruckTest",jobAttr, pageAttr );

if (job == null) return;

Zentrale Klasse ist hier java.awt.PrintJob. Sie repräsentiert einen Druckauf-trag, den Sie mit JobAttributes- und PageAttributes-Objekten konfigu-rieren können. In diesem Beispiel wird mit DialogType.NATIVE festgelegt,dass Java den System-Druckdialog anzeigen soll (dieser Aufruf ist eigentlichunnötig, da dies die Standardeinstellung ist). ColorType.MONOCHROMEbestimmt entsprechend eine schwarz-weiße Ausgabe.

Das PrintJob-Objekt legen Sie nicht selbst an, sondern Sie lassen es vonToolkit.getPrintJob() erzeugen. Ein Toolkit-Objekt stellt die tatsächlicheAWT-Implementierung des Systems dar, und die meisten Methoden darinrufen Sie nie direkt auf. Einige wenige nützliche Hilfsroutinen – beispielsweisezur Ermittlung der Bildschirmgröße oder eben zum Erzeugen eines Druckauf-trags – benötigt man aber relativ häufig. Das passende Toolkit-Objekt erfragenSie entweder mit getToolkit() von einer AWT-Komponente oder aber mitToolkit.getDefaultToolkit(). Hier wird ersteres verwendet, da die Klassevon Frame erbt und damit selbst eine Komponente ist – außerdem benötigenSie die Frame-Referenz für getPrintJob(), weil Sie den Druckauftrag damitdem Frame zuordnen.

Durch den Aufruf von getPrintJob() wird auch der Druckdialog angezeigt.Wenn der Benutzer darin auf »Abbrechen« klickt, erhalten Sie als Rückgabe dienull-Referenz und können Ihrerseits die Druckausgabe beenden.

Der Methodenname print() ist übrigens beliebig wählbar und durch keineSchnittstelle fest vorgegeben.

Graphics g = job.getGraphics();Dimension pageSize = job.getPageDimension();g.drawOval( 0, 0, pageSize.width, pageSize.height );g.drawString( "Breite " + pageSize.width + " Pixel, Höhe "

+ pageSize.height + " Pixel.",pageSize.width/2, pageSize.height/2 );

g.dispose();job.end();

}

Page 69: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

377Drucken

1

2

3

4

5

6

7

8

9

10

11

12

13

// ...}

Hat der Anwender »Drucken« angeklickt, können Sie vom PrintJob-Objekteinen Graphics-Kontext erfragen und darin ganz normal Grafik und Text aus-geben. Sobald Sie fertig sind, müssen Sie den Graphics-Kontext mitdispose() freigeben und den Druckauftrag mit end() abschließen – sonstwird nichts gedruckt!

Wenn Sie das Programm nun laufen lassen, zeigt das System zuerst einen Dia-log zur Konfiguration des Papierformats an (siehe Abbildung 7.8). Ob dieserDialog wirklich erscheint, hängt davon ab, ob das System aus dem über-gebenen PageAttributes-Objekt ausreichend Informationen extrahierenkann oder nicht.

Abbildung 7.8 Konfiguration des Papierformats

Anschließend wird der eigentliche Druckdialog dargestellt, in dem Sie die Mac-typische Vielzahl von Einstellmöglichkeiten vorfinden (siehe Abbildung 7.9).Unten links im Dialog sehen Sie auch die Knöpfe, mit denen die Druckausgabeautomatisch in eine PDF-Datei umgelenkt werden kann.

Neben diesem systemspezifischen Druckdialog bietet Java auch einen Dialog,der auf allen Systemen gleich aussieht (siehe Abbildung 7.10). Sie können dieseForm auswählen, indem Sie bei JobAttributes.setDialog() den WertJobAttributes.DialogType.COMMON übergeben. Überlegen Sie sich aber gut,ob Ihnen der Java-eigene Druckdialog irgendwelche Vorteile bringt, denn derAnwender wird ihn als Fremdkörper in einer ansonsten an das System ange-passten Applikation empfinden.

Page 70: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia378

Abbildung 7.9 Konfiguration des Druckauftrags

Abbildung 7.10 Javas systemübergreifender Druckdialog

Der große Nachteil der java.awt-Druckschnittstelle ist, dass Java 2D von ihrnicht unterstützt wird. Daher wurde mit Java 1.2 eine neue Druck-API im Paketjava.awt.print eingeführt, die neben der Java 2D-Fähigkeit auch guteKonfigurationsmöglichkeiten für das Papierformat besitzt. Zudem benötigenSie hierbei keine Frame-Referenz wie beim java.awt.PrintJob, daher ist dieAnsteuerung beispielsweise auch aus einer main()-Methode heraus möglich:

//CD/examples/ch07/print/Print12/Print12.javaimport java.awt.print.*;// ...

Page 71: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

379Drucken

1

2

3

4

5

6

7

8

9

10

11

12

13

PrinterJob job = PrinterJob.getPrinterJob();

PageFormat seitenformat = job.defaultPage();seitenformat.setOrientation( PageFormat.PORTRAIT );

Printable daten = new Druckdaten();job.setPrintable( daten, seitenformat );

if ( job.printDialog() ) {try {

job.print();}

catch (PrinterException e) {e.printStackTrace();

}

Diesmal wird kein java.awt.PrintJob-Objekt verwendet, sondern einjava.awt.print.PrinterJob-Objekt. Dieses erzeugen Sie wiederum nichtdirekt, sondern Sie ermitteln ein passendes Objekt mit getPrinterJob(). MitdefaultPage() erfragen Sie danach ein Standard-PageFormat-Objekt für dasPapierformat, das dann noch konfiguriert werden kann – hier wird mitsetOrientation() das Koordinatensystem eingestellt, das seinen Ursprunglinks oben hat.

Die Besonderheit der java.awt.print-API kommt jetzt: Die eigentlicheMethode für die Druckausgabe wird in einer Klasse realisiert, die dasPrintable-Interface implementiert. Bei diesem Beispiel ist dies die KlasseDruckdaten, die Sie weiter unten aufgelistet finden. Dieses Printable-Objektwird zusammen mit dem PageFormat-Objekt mittels setPrintable() an denDruckauftrag übergeben.

Nun können Sie die print()-Methode des Druckauftrags zum sofortigen Aus-drucken aufrufen. Oder aber Sie rufen vorher noch printDialog() auf, damitder Druckdialog angezeigt wird und der Anwender die voreingestellten Wertenoch verändern kann. printDialog() gibt false zurück, wenn der Benutzer»Abbrechen« angeklickt hat.

Die Klasse mit der eigentlichen Ausgabe-Methode ist wie folgt implementiert:

//CD/examples/ch07/print/Print12/Druckdaten.javaimport java.awt.*;import java.awt.print.*;public class Druckdaten implements Printable {

Page 72: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Grafik und Multimedia380

public int print( Graphics graphics,PageFormat pageFormat, int pageIndex ) {

if (pageIndex > 0) return NO_SUCH_PAGE;

Durch das Printable-Interface muss die Klasse die Methode print()implementieren, der ein Graphics-Kontext, ein Seitenformat-Objekt und dieaktuelle Seitenzahl übergeben wird. Java ruft die print()-Methode einfachimmer wieder mit aufsteigender Seitenzahl auf – bis das Ende erreicht ist undprint() den Wert Printable.NO_SUCH_PAGE zurückgibt. Hier kann nur eineeinzige Seite mit dem Index 0 gedruckt werden.

Graphics2D g2d = (Graphics2D)graphics;g2d.translate( pageFormat.getImageableX(),

pageFormat.getImageableY() );int breite = (int)pageFormat.getImageableWidth();int hoehe = (int)pageFormat.getImageableHeight();

g2d.drawOval( 0, 0, breite, hoehe );g2d.drawString( "Breite " + breite + " Pixel, Höhe " + hoehe

+ " Pixel.", breite/2, hoehe/2 );return PAGE_EXISTS;

}}

Wie bei Java2D üblich können Sie den Graphics-Kontext in einenGraphics2D-Kontext umwandeln. Anschließend wird die Ausgabe mittranslate() in den sichtbaren Bereich verschoben, dessen Startpunkt mitgetImageableX() und getImageableY() aus dem Seitenformat ermitteltwird. Ebenso werden die Breite und Höhe des Ausgabebereichs abgefragt,wodurch die Seitenränder korrekt beachtet werden. Nach erfolgreicher Aus-gabe einer Seite muss print() schließlich noch den Wert Printable.PAGE_EXISTS zurückgeben.

7.8 Literatur & Links

� Java 2D

� J. B. Knudsen, »Java 2D Graphics«, O’Reilly 1999Dieses Buch ist zwar schon etwas älter, bietet aber eine hervorragendeProgrammieranleitung für 2D-Grafik mit Java.

� http://java.sun.com/products/java-media/2D/Auf dieser Seite listet Sun alle relevanten Dokumentationen zu Java 2Dund verwandten APIs auf.

Page 73: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

381Literatur & Links

1

2

3

4

5

6

7

8

9

10

11

12

13

� Java 3D

� D. Selman, »Java 3D Programming«, Manning Publications 2002Dieses Buch deckt viele weiterführende Informationen zu Java 3D ab, dievon der Standarddokumentation nicht oder nur unzureichend behandeltwerden.

� OpenGL

� Shreiner/Woo/Neider, »OpenGL Programming Guide«, 4th ed., Addison-Wesley 2003Auch wenn in diesem Buch C und nicht Java als Programmiersprache ein-gesetzt wird, bietet es einen guten Überblick über die wesentlichen Ideender OpenGL-Programmierung. Und Java-APIs wie JOGL sind eh rechtnahe an den C-Routinen.

� http://www.opengl.org/Die OpenGL-Homepage enthält unter anderem eine Programmierein-führung und das Referenzhandbuch.

� QuickTime

� Vogt/Kastenholz, »QuickTime 6«, Galileo Press 2002Dieses Buch ist keine Programmieranleitung für QTJava, sondern eineausführliche Anleitung für die Anwendung der QuickTime-Technologie –aber das Verständnis dafür ist unerlässlich, wenn Sie QuickTime ernsthaftprogrammieren wollen.

Page 74: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

597Index

Index

$APP_PACKAGE 197, 213, 214$JAVAROOT 197, 212, 214.app 166.hotspotrc 566.login 65, 414.MacOSX 65.mov 366.pbHelpIndexerList 85.pbproj 79.pkg 166.webloc 596.xcode 79/etc/hostconfig 434, 439/usr/bin/cvs 96/usr/lib 320/usr/lib/java 317/usr/local/ 448/usr/local/bin 403/usr/local/mysql/ 433/usr/local/pgsql/ 438\n 294\r 294_blank 273127.0.0.1 4493D-grafik 35668k 270, 531

AAAPL 199Abhängigkeiten von Targets 90, 314Ablage-Menü 28Abstand zum Fensterrand 129abstract 524Abstract Windowing Toolkit 119, 121abstrakte Klasse 524Abstürze 30ACTION 579Action 334, 336, 337action 456ACTION_COPY 169ACTION_LINK 169ACTION_MOVE 169ActionEvent 126, 153ActionListener 126actionPerformed() 126

ADB 301ADC 46

Reference Library 43add() 126addActionListener() 126addApplicationListener() 155addDocumentListener() 159addMouseListener() 135addSeparator() 128, 149addWindowListener() 123Administrator-Rechte 67, 348Aktivitäts-Anzeige 32Aktualisierung 44, � s. UpdateAlias 31, 589, � s. Link,

� s. VerknüpfungAlpha-Kanal 189Alpha-Wert 134ALT_MASK 150Alt-Taste 16always 166anonyme Klasse 126, 527anonymes Paket 511Ant 62, 77, 78, 385, 465, 468, 474

ear 475Eclipse 394Filter 395jar 475JAR-Archiv 391jarbundler 396Manifest 391metainf 475Programmpaket erzeugen 394Property 389Umgebungsvariablen 389war 475Xcode 388Xcode 1.5 393XDoclet 477

ANT_HOME 386AntiAliasedGraphicsOn 558AntiAliasedTextOn 558Antialiasing 556, 557, 589Ant-Task 387Anweisung 514Apache 242, 257, 445, 448, 503

Page 75: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index598

Ant 385Maven 396

Apfel-Menü 27Apfel-Taste 16API 589API-Dokumentation 43, 62, 512app 187appBundleIsTraversable 166AppKit 324, 336APPL???? 192Apple 70

Applet Runner 59, 535Application Server 453Application Servers-Paket 465Developer Connection 46Gestaltungsrichtlinien 171Human Interface Guidelines 171J2EE 479OSXAdapter 164WebObjects 464

apple.awt.antialiasing 557apple.awt.brushMetalLook 168, 552apple.awt.fakefullscreen 555apple.awt.fileDialogForDirectories

138, 552apple.awt.fractionalmetrics 557apple.awt.fullscreencapturealldis-

plays 555apple.awt.fullscreenhidecursor 555apple.awt.fullscreenusefade 555apple.awt.graphics.EnableLazy-

Drawing 558apple.awt.graphics.EnableLazy-

DrawingQueueSize 558apple.awt.graphics.EnableLazyPixel-

Conversion 563apple.awt.graphics.OptimizeShapes

558apple.awt.graphics.RenderDrawArc

562apple.awt.graphics.RenderDrawOval

562apple.awt.graphics.RenderDraw-

Polygon 562apple.awt.graphics.RenderDrawRect

562apple.awt.graphics.Render-

DrawRoundRect 562

apple.awt.graphics.Render-DrawShape 562

apple.awt.graphics.RenderFillArc 562apple.awt.graphics.RenderFillOval

562apple.awt.graphics.RenderFill-

Polygon 562apple.awt.graphics.RenderFillRect 562apple.awt.graphics.RenderFill-

RoundRect 562apple.awt.graphics.RenderFillShape

562apple.awt.graphics.RenderGlyphs 563apple.awt.graphics.RenderImage 562apple.awt.graphics.RenderLine 562apple.awt.graphics.RenderString 563apple.awt.graphics.RenderUnicodes

563apple.awt.graphics.UseTwoImageLa-

zyPixelConversion 563apple.awt.interpolation 557apple.awt.rendering 557apple.awt.showGrowBox 168, 551apple.awt.textantialiasing 557apple.awt.window.position.forceSafe-

Creation 556apple.awt.window.position.forceSafe-

ProgrammaticPositioning 556apple.awt.window.position.force-

SafeUserPositioning 556apple.cmm.usecolorsync 563apple.laf.AquaLookAndFeel 144apple.laf.useScreenMenuBar 162, 181,

551AppleEvent-Deskriptor 341AppleJavaExtensions 163, 329AppleScript 340, 350

Cocoa Java 340osascript 342

APPLET 254Applet 59, 60, 64, 241, 250, 536

Cache 260Lebenszyklus 253Sicherheit 262

Applet Launcher 61, 257Applet Runner 535AppleTalk 302AppletContext 271, 281

Page 76: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

599Index

appletviewer 61, 257, 264, 273Application 154, 203, 289Application Kit 336Application Support 68application.xml 473, 475ApplicationEvent 155ApplicationListener 154, 205Applications 31, 225Applications (Mac OS 9) 533Applikation 187

aktive 27Applikations-Server 453, 463, 464Aqua 31, 56, 144, 589

Gestaltungsrichtlinien und Layout-Manager 166

Größe von Komponenten 166Hintergrund 134Human Interface Guidelines 332

Aqua-Look & Feel 142, 144Arbeitsverzeichnis 213ARCHIVE 254, 255, 261Archivnamen 288ArgoUML 417Argumentliste, variable 545Arguments 213, 216, 550Array 545ASCII 589ASP 445assert 570, 580assertTrue 399Assoziation 522Attribute 327attributorientiertes Programmieren

477Audio 366, 374Audiodaten 362Auflösungsunabhängigkeit 120Aufrufhierarchie 88Aufzählungen 545Ausdruck 515ausführen 87Ausführungsbit � s. Execution-BitAusnahmefehler 528Aussehen 142, 144

im Programmcode setzen 145Auswerfen 221Authentisierung 463Autoboxing 544

Auto-Commit 431automatische Variable 515Autorisation 348, 463Autorisation Toolkit 348Autounboxing 545AVI 362awakeFromNib() 337AWT 119, 121, 251, 291, 589

Anpassung an andere Systeme 128Brushed Metal 167Cocoa 339Xcode 122

BbackgroundOnly 171, 553Back-in-Time-Debugging 106Backslash 590bash 39Basisklasse 520batch 576Batch-Datei 177BBEdit 36, 177Bea WebLogic 464Bean 463Bean Managed Persistance 468Bearbeiten-Menü 28beenden 176Beenden-Menüpunkt 132Befehl-Taste 16Benutzer 31, 432

Passwort ändern 433Benutzer-Prozesse 65Benutzerverwaltung 26, 347, 433Benutzer-Verzeichnis 37, � s. Home-

VerzeichnisBenutzungsoberfläche 25, 119, 551Berechtigung 263Berkeley DB 441Betriebssystem 48, 297Bezeichner 510bg 435Bibliothek 51, 66, 182, 318

Abhängigkeiten 319Installationspfad 321Suchreihenfolge 68

bicubic 557Big Endian 548BigDecimal 516

Page 77: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index600

BigInteger 516Bildbearbeitung 188, 353Bildlaufleiste 159bilinear 557bin 30, 188Bitmap 589Block 509BlueJ 113Bluetooth 497

MIDP 500Bluetooth Assistent 498Bluetooth Datenaustausch 498BMP 354, 468, 589Boolean 161bootclasspath 490, 568Booten 31Boot-Manager 31, 531bootstrap 543BorderLayout 120, 125, 274Borland

JBuilder 107Together Control Center 108Together Solo 108

Bourne-Shell 177Boxing 544BoxLayout 120BranchGroup 356Breakpoint 88, 102BrowseListener 303Browser 60, 64, 234, 250, 255, 265,

299, 324, 325AWT-Komponente 339Java 1.4 266

Browser � s. Web-BrowserBrowser Launcher 300Browser Opener 300BrowserControl 301Brushed Metal 167brushMetalLook 552BSD 56Buch-CD 595BuchUpdate 47Buch-Webseite 596BufferedImage 563Bug Parade 292Bug Reporter 548Build 86, 212, 391

Einstellungen 91

Phasen 92, 313, 491Protokoll 86, 494Prozess 385, 577Settings 91System 90transcript 86Variablen 92

Build Settings 577Build Transcript 494build.xml 386, 474BUILD_DIR 578buildDMG 222Buildfile 386, 474BUILT_PRODUCTS_DIR 578Bundle 187, 219, 319, 394, 582, 589

im Dateiauswahldialog 138Bundle Resources 92Bundle-Bit 207Business Logic 470Button 120, 125Bytecode 22, 38, 403, 404, 414, 512, 589

Viewer 406

CC, C++ 24, 309, 519, 521Cache 238, 260CAD 359call 276CallStaticVoidMethod() 323Camino 259, 268Canvas 506Canvas3D 356Carbon 57, 589

Locking 326Carbon File Locking 573CarbonLock 326Carriage Return 294, 548CASE 108Cast 516, 589CATALINA_HOME 449catch 528cc 318CD 595ceil() 516CENTER 125, 129Certificate Authority 247CFBundleAllowMixedLocalizations

210

Page 78: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

601Index

CFBundleDevelopmentRegion 210CFBundleDisplayName 210, 219CFBundleDocumentTypes 216CFBundleExecutable 210CFBundleGetInfoHTML 210, 219CFBundleGetInfoString 210, 219CFBundleIconFile 211CFBundleIdentifier 211CFBundleInfoDictionaryVersion 211CFBundleName 130, 211, 219, 552CFBundlePackageType 192, 211CFBundleShortVersionString 211, 219CFBundleSignature 192, 211CFBundleTypeExtensions 217CFBundleTypeIconFile 217CFBundleTypeMIMETypes 217CFBundleTypeName 217CFBundleTypeOSTypes 217CFBundleTypeRole 217CFBundleVersion 212CGI 445, 589check, jni 569Checkbox 120, 125CheckboxGroup 125checkSpelling() 346chmod 178, 207chown 438CHUD-Tools 409CITime 576Class 140Class.forName() 140, 288, 289, 291,

323, 349CLASS_ARCHIVE 581CLASS_ARCHIVE_SUFFIX 581CLASS_FILE_DIR 491, 581CLASS_FILE_LIST 582ClassCastException 153class-Datei 39, 509Classes 63, 475classes.jar 288, 405, 413Classic 324, 589

Speicherprobleme 537Umgebung 24, 533

ClassLoader 244, 289ClassNotFoundException 289CLASSPATH 51, 66, 68, 176, 180, 212,

216, 413, 550, 567, � s. cpCLDC 483

Clean 390Client-VM 566close() 428, 429, 519cmd 298CMM 563CMP 468, 589Cocoa 57, 330, 349, 589

Action 334, 337API 336, 339Applikation Kit 336AWT 339Foundation 336id 334Java und Objective-C 339NSObject 333Outlet 334Swing 339

Cocoa Java 300, 330AppleScript 340Bridge 339Referenzen 335Speech 344Spelling 345Xcode 331

Cocoa Java, Bridge 330CocoaComponent 339CocoaMySQL 437Cocoon 299CODE 255Code Completion 83Code Conventions 530Code Sense 83CODEBASE 239, 255, 261Codec 354CodeGuide 106Code-Optimierung 405Codepage 295CodeWarrior 110Collections API 22Color 134, 523ColorSync 563com.apple.audio 375com.apple.backgroundOnly 171, 553com.apple.cocoa.

application.NSMenu 555com.apple.dnssd 303com.apple.eawt 146, 154com.apple.eio 329

Page 79: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index602

com.apple.forcehwaccel 561com.apple.hwaccel 560com.apple.hwaccelexclude 560com.apple.hwaccellist 560com.apple.hwaccelnogrowbox 561com.apple.macos.smallTabs 553com.apple.macos.use-file-dialog-

packages 137, 553com.apple.macos.useMDEF 553com.apple.macos.useScreenMenuBar

162, 553com.apple.macosx.AntiAliased-

GraphicsOn 558com.apple.macosx.AntiAliased-

TextOn 558com.apple.mrj 121, 122, 328

auf anderen Systemen 139com.apple.mrj.appli-

cation.apple.menu.about.name 130, 181, 552

com.apple.mrj.application.classpath 216, 550

com.apple.mrj.appli-cation.growbox.intrudes 552

com.apple.mrj.appli-cation.JVMVersion 216, 551

com.apple.mrj.application.live-resize 553

com.apple.mrj.application.main 216, 550

com.apple.mrj.application.para-meters 216, 550

com.apple.mrj.appli-cation.vm.options 216, 551

com.apple.mrj.application.workingdirectory 216, 550

com.apple.mrj.MRJAboutHandler 552com.apple.mrj.swing.MacLoo-

kAndFeel 144com.apple.usedebugkeys 561com.muchsoft.util.Mac 139, 163com.sun.j3d.utils 356com.sun.jimi.core 355com.sun.media.jai.codec 354Combo Box 166Command 503command 178CommandListener 503

Commands 63Command-Taste 16commit() 430Communicator 267Compiler 38, 412, 512, 589CompileThreshold 576Component 120Concurrent Versions System 94Connection 335, 428, 429, 430Connection-URL 428Connector/J 437Console 41Constructor 141Container 120Container Managed Persistance 468Content Pane 159Contents 190, 582context-root 473Controller 467Copy Files 93

Programm 313Copyright 198, 211

Zeichen 129CORBA 479, 589CoreAudio 375CoreFoundation 316CoreGraphics 559cp 180, 491Cp1252 296CR 294Crash-Log 41create() 470, 472createCompatibleImage() 355createdb 438CreateException 469createImage() 374createStatement() 428, 430Creator-Code 191, 199, 211, 296, 327Cross-Platform 305CTRL_MASK 150Ctrl-Taste 16Current 64CurrentJDK 63currentTimeMillis() 301Custom Build Command 389CustomView 336CVS 94, 593

aktivieren 96

Page 80: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

603Index

checkout 95commit 95Compare 97Diff 97import 95init 94Projekt importieren 95

CVSROOT 94cvswrappers 94Cyberduck 244

Dda 571Darstellungshinweis 556Darwin 56, 70, 318, 590Data Fork 188Database 423DataFlavor 169DataRef 371

file-URLs 372DateFormat 446Datei

Attribute 327Information 198, 210Metadaten 327umbenennen 179

Dateiauswahldialog 552, 553AWT 136Bundles / Pakete 138, 166Swing 165Verzeichnisse auswählen 138

Dateiname 297, 537Länge 294Sonderzeichen 294

Dateinamenerweiterung 328, 593Dateisystem 29, 69Dateitrennzeichen 293Dateiverwaltung 347Datenbank 423

Treiber laden 427Verbindung abbauen 430Verbindung aufbauen 428

Datenbankentwurf 426Datenbank-System 424Datenbank-Verwaltungs-System 423Datenbasis 423Datensatz 424Datentyp 515

DB 423, 590DBMS 424, 590dclj 530de.comp.lang.java 530debug 569Debugger 88, 102Debugging 88

Back-in-Time 106Grafikausgabe 562

Debug-Information 409DecimalFormat 514Decompiler 403, 404Decoration 134DefaultClasspath 68Deinstallieren 187Deklaration 515Deployment 476DEPLOYMENT_LOCATION 578Deployment-Deskriptor 458, 471, 473,

477deprecated 328, 370Desktop 29, 590destroy 253DestroyJavaVM() 324Destruktor 519Developer Tools 42, 76DEVELOPMENT_PLIST_FILE 582Dialog 120

Elemente 28zentrieren 129

Dictionary 209Java 212, 237

Dienst 450Dimension 129disableassertions 571DisableExplicitGC 575disablesystemassertions 572Disassembler 406Disk Copy 220Disk Image 220, 231Display 490display-name 471, 473displayURL() 300dispose() 124, 519DLL 311DMG 220, 590

Hintergrundbild 222Nur lesen 223

Page 81: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index604

Segmente 42DMG Maker 222DMG Tool 222dmgpart 42DnD 169, 590DnDConstants 169DNS 303, 590dns_sd.jar 303DNSSD 303DNSSDService 303do..while 517Dock 26, 535, 590dock

icon 572name 572Symbol 180Symbol anklicken 156

Document Object Model 279DocumentListener 159doGet() 446, 472Dokumentation 43, 46, 410, 512Dokumentsymbol 217Dokumenttyp 199, 204, 209, 216Dokumenttypen 131DOM 279Dongle 404doPost() 456Doppelpunkt 69DOS 293, 295Drag & Drop 29, 51, 169, 220, 590DragSourceDragEvent 170Drawable 367Drei-Schicht-Architektur 463DriverManager 428, 430DrJava 115Druckdialog 299, 377Drucken 375dsa 572DSTROOT 579DTD 214Duke 535dyld 320DYLD_FALLBACK_FRAMEWORK_

PATH 320DYLD_FALLBACK_LIBRARY_PATH

320DYLD_LIBRARY_PATH 320

Dylib 318, 319, 326, 590Suchpfade 320

Dynamic Shared Library 318dynamischer Methodenaufruf 524dynamisches Laden von Klassen 289

Eea 571EAR 385, 474ear 475, 581Early Access 541EAST 125Eclipse 98, 205

Ant 394Debugger 102Eingabevervollständigung 100Fehler 100JUnit 402kompilieren 100SDK 98Versionen 2.1 und 3.0 99XML-Plugin 417

Eden-Generation 566, 574Editor 204, 217einfacher Datentyp 515Eingabeaufforderung 38Eingabevervollständigung 83, 100Einstellungen...-Menüpunkt 52, 131,

155, 164eio 329EJB 78, 463, 467, 479, 590

Container 463, 468, 471Deployment-Deskriptor 471Komponente 463, 477

ejb 473ejbActivate() 470ejb-class 471ejbCreate() 470EJBHome 470ejb-jar.xml 471, 473, 475ejb-name 471, 473EJBObject 469ejbPassivate() 470ejbRemove() 470Element 254else 516emacs 37

Page 82: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

605Index

E-Mail 295EMBED 255Embedding Framework 325emulator 494enableassertions 571EnableLazyDrawing 558EnableLazyDrawingQueueSize 558EnableLazyPixelConversion 563enablesystemassertions 572Ende-Tag 209, 254Endorsed Directory 568English.lproj 192, 218Enterprise JavaBeans 463, 467Enterprise-Applikation 78, 468Enterprise-Applikations-Archiv 474Enterprise-Applikations-Deployment-

Deskriptor 473Entity-Bean 467Entwicklerpaket 591Entwicklertools 42Entwicklungsumgebung 75Entwurfsmuster 591Enumeration 152, 545environment.plist 65Environment-Variable 94erben 520Ereignis-Behandlung 120Ereignis-Verarbeitungs-Thread 157, 274Ergebnistabelle 426, 429Erweiterungs-Bibliotheken, Suchrei-

henfolge 68Erweiterungsverzeichnisse 66esa 572Escape-Sequenz 514, 590etc 30, 53Ethernet-Hardware-Adresse 310Euro-Symbol 590eval 277Event Handling 120EventObject 164EventQueue 291examples 595Exception 528ExceptionDescribe() 324ExceptionOccurred() 324exec() 297, 342execPrivileged() 349

Executable 80ausführen 87

executeQuery() 428executeUpdate() 430Execution-Bit 178Expert View 92, 577Explorer 27Exposé 30, 590Expression 515ext 67extends 122, 520, 526Extension 593Extensions 66, 131, 401extern C 315External Target 90, 389Extreme Programming 398

Ffail 400fakefullscreen 555Fallunterscheidung 516FALSE 161FAQ 46Farbverwaltung 563Feld 424, 429Fenster 120, 535

Änderungssymbol 160Hintergrund 134unsichtbar 155zentrieren 129

Fenster-Menü 29, 148Fensterrand 129Festplatte 31Festplatten-Dienstprogramm 32, 220Festschreiben 431File 293, 297

pathSeparator 294pathSeparatorChar 294separator 293, 294separatorChar 294

File Transfer Protocol 244file.encoding 296, 549file.separator 294, 549FileDialog 136, 137, 165, 552, 553FileManager 296, 300, 329, 330FileMerge 97FilenameFilter 138

Page 83: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index606

FileStorm 231FileType 199Filme 366Filter 138final 522finally 528FindClass() 323Finder 27, 590findFirstMisspelledWord() 347findFolder() 330findMisspelledWordInString() 347Firebird 439Firefox 259, 269Fix and Continue 89floor() 516FlowLayout 120, 125, 253for 517, 544for each 544forcehwaccel 561forceSafeCreation 556forceSafeProgrammaticPositioning

556forceSafeUserPositioning 556FORM 456Form 488formale Parameter 513forName() 140, 289Foundation (Cocoa) 336Foundation Classes 119fractionalmetrics 557Frame 120, 122

Rahmen 134Frame.ICONIFIED 128, 153Frame.NORMAL 154Framework 57, 62, 316, 590Frameworks & Libraries 92FreeBSD 56, 302freie Software 590Fremdschlüssel 425FTP 244Full-Screen Exclusive Mode 554fullscreencapturealldisplays 555fullscreenhidecursor 555fullscreenusefade 555FullScreenWindow 556fullversion 568Funktion 513future 568

GG3, G4, G5 548Garbage Collection 326, 519, 566, 574gcc 312, 318, 412gcc3 318GDB 89gebürstetes Metall 167GeekTool 42Generics 24, 544GenericServlet 446Generische Typen 544German.lproj 218Geschäftslogik 467, 470Geschwindigkeit 13Gestaltungsrichtlinien 171GET 456getAppletContext 273getBundle() 157getBytes() 296getConnection() 428, 430getConstructor() 141, 290getContentPane 274getContentPane() 159getCrossPlatformLookAnd-

FeelClassName() 145getDefault() 157getDefaultToolkit() 149, 374, 376getDirectory() 137getDouble() 428getExtendedState() 153getFile() 137getFileCreator() 328GetFileInfo 199, 327getFileType() 328getGraphics() 376getInsets() 129getKeyStroke() 149getMember 277getMenuComponentCount() 152getMenuShortcutKeyMask() 149getMethod() 289getMouseLocationOnScreen() 289getParameter 255getParameter() 456getPrinterJob() 379getPrintJob() 376getProperty 547getRequestURI() 456

Page 84: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

607Index

getRootPane() 134, 160getScreenSize() 129getSize() 129getSource() 153GetStaticMethodID() 323getString() 148, 428getSystemLookAndFeelClassName()

145Getter 519getTitle() 153getToolkit() 129, 376getUserAction() 170getWindow 276GIF 189, 354, 492GL4Java 359GLCanvas 359glconfigurations.properties 560globaler Code 510GNU 590

GPL 300gnumake 310Goal 397Gosling, James 11GPL 300, 590Grafikausgabe 353Grafik-Hardware-Beschleunigung 196,

558Grafikkarte 559Grafik-Primitiv 557grafische Benutzungsoberfläche 119grant 263Graphic User Interface � s. GUIGraphicConverter 188, 327Graphics 253, 353, 376, 380

dispose() 376Graphics2D 253, 353, 380GraphicsEnvironment 355GraphicsExporter 374GraphicsImporter 374GraphicsImporterDrawer 374GridLayout 125Groovy 414groovy 415Groovy, Compiler 415GROOVY_HOME 414groovyc 415groovyConsole 415groovysh 414

Growbox 551, 552Grundlagen 509Gruppenverwaltung 347GUI 25, 48, 119, 340, 551, 590

HHäkchen vor einem Menüpunkt 153Handheld 483, 500handleAbout() 130, 140, 155, 164handleOpenApplication() 131, 140,

156, 164handleOpenFile() 131, 132, 140, 156,

164, 205, 218handlePreferences() 156handlePrefs() 130, 140, 164handlePrintFile() 140, 156, 164handleQuit() 132, 133, 140, 156, 164handleReOpenApplication() 156, 164Handy 483, 497Hardware-Beschleunigung 196, 558Hardware-Kopierschutz 404Hardware-Zugriff 309Hauptklasse 512Hauptversion 195, 259hdiutil 222Header 312, 315Headers (Verzeichnis) 325Headless AWT 553HeadlessException 170Headless-Modus 170Heap 573HFS+ 69, 297, 590Hilfe 29, 33, 42Hintergrund 134Hintergrundbild 222HiRes Timer 301Hit Mask 189Hochauflösende Zeitmessung 301Home 37, 53, 63, 543home 471Home-Interface 470HORIZONTAL_SCROLLBAR_ALWAYS

159Host 590hostconfig 434, 439Hot Deployment 476HotSpot 22, 566Hotsync Manager 500

Page 85: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index608

hqx 188HSQLDB 440HTML 234, 241, 250, 253, 265, 274, 278,

445, 453, 590anzeigen 299Entity 296in Swing-Komponenten 161Validator 271

HTML Converter 256HTTP 446, 456, 591httpd 242HTTP-Proxy 259HttpServlet 446, 472HttpServletRequest 446HttpServletResponse 446HTTPS-Proxy 259Hüllklasse 276, 311, 330, 343Hüllobjekt 544Human Interface Guidelines 31, 48,

171, 332Humble Narrator 344hwaccel 560hwaccel_info_tool 560hwaccelexclude 560hwaccelexclude.properties 561hwaccellist 560hwaccelnogrowbox 561Hypersonic SQL 440

IIB 331, 591IBAction 336IBOutlet 336iCab 270, 281ICC_ColorSpace 563icns Browser 189icns-Datei 180, 188Icon Composer 188Icon-Datei 28, 188, 191, 207, 217ICONIFIED 128, 153id 334ID � s. SchlüsselIDE 75, 591IDEA 105Identifier 200, 211Identifikation 348if 516IllegalStateException 132

Im Dock ablegen 128Image 374Image I/O 353Immortal-Generation 576implements 122, 525import 288, 511import static 545incgc 575Index 83Index Templates 84Info.plist 130, 171, 191, 207, 208, 214,

216, 237, 339, 395, 550, 565, 582INFO_PLIST_FILE 582InfoPlist.strings 192, 219Information Property List 208Inhalts-Ebene 159init 252initdb 438InitialContext 473Inkrement 517innere Klasse 124, 527Input Files 93InputEvent 149InputStreamReader 296INSERT INTO 430Insets 129INSTALL_DIR 579INSTALL_GROUP 579INSTALL_MODE_FLAG 579install_name_tool 321INSTALL_OWNER 579INSTALL_PATH 579install_templates 84install4j 229InstallAnywhere 227Installationspaket 166, 223, 592Installationsprogramm 192, 224InstallerMaker 232InstallShield 228int 575Integrated Development Environment

� s. IDEIntellij IDEA 105InterBase 439Interface 123, 290, 525interface 525Interface Builder 331, 340

Action 336

Page 86: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

609Index

Connection 335Klassen ableiten 333Objekte erzeugen 335Outlet 335Quelltext generieren 336Swing 340Target/Action 336

internalversion 569Internet Explorer 267Internet-Protokolle 295interpolation 557Interpreter 22invoke() 289invokeAndWait() 274, 291invokeLater() 133, 274, 291Invoker-Servlet 452iODBC 441IOKit 316IP 590, 591IPv4 445IPv6 445isPopupTrigger() 135iText 299IzPack 233

JJ/Direct 324J2EE 78, 447, 463, 591

Apple 479Applikations-Server 463SDK 463Server 463

J2ME 483, 591Konfiguration 483MIDlets 485MIDP 484Profil 484System-Properties 488Tipps 508Wireless Toolkit 485

J2SE 447, 591Version 5.0 24, 541

j2se 240jad 403JAD-Datei 493, 502Jaguar 23, 591JAI 24, 353

Image I/O Tools 354

jai_imageio.jar 354Jakarta Struts 459Jakarta Tomcat 448Jam 90JApplet 272jar 182, 475, 567

Option 185Jar Bundler 62, 193, 214Jar Bundler Ant Task 396JAR Caching 260Jar Launcher 185JAR-Archiv 51, 67, 182, 197, 207, 241,

244, 288, 385, 491in Xcode 186per Doppelklick starten 184statisch einbinden 92

jarsigner 247Java 57

2D 353, 378, 3803D 24, 356, 381Advanced Imaging 24, 353API-Dokumentation 410, 512Application Stub 191, 582Archive Settings 92Bytecode 22, 38Code Conventions 530Collection Framework 544Communications API 301Compiler 38, 412, 512Compiler Settings 91Data Objects 423, 591Debugger 89Developer Package 312Developer Tools 43, 76Development Kit 23Einführung 530Embedding API 536Embedding Framework 64, 258, 325Embedding Plugin 259Enterprise Edition 463Erweiterungen 66Erweiterungsverzeichnis 401Foundation Classes 119Grundlagen 509Home 65Image I/O 354Image Management Interface 354Kompatibilität 292

Page 87: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index610

Konsole 258Language Specification 412Laufzeitparameter 259Laufzeitumgebung 321, 513Look & Feel 142, 146Media Framework 362, 374Micro Edition 483Native Interface 309Network Launching Protocol 234Plugin 60, 255, 258, 266, 277, 325,

536Plugin Einstellungen 259Preferences API 54Programmierrichtlinien 510, 530Programmiersprache 22Quelltext 411QuickTime 366Reflection 139, 163Resources 92Runtime Environment 23, 176Runtime-Version 586Scripting 280Server Faces 104Servlets 445, 446Shared Archive 566, 576Sound 374Speech Framework 343Spelling Framework 345Studio Creator 104User Group 70Version 63, 194, 292, 551, 585, 586Version 1.1 91Version 1.5 24, 541Version der Apple-Implementierung

586Versionsproblem 407Virtual Machine 22, 64, 321, 536, 565VM 22, 64VM-Framework 63Web Start 60, 112, 234

java 39, 63, 176, 263, 513, 543, 565Java 1.3.1 Plugin Einstellungen 259Java 1.4.2 Plugin Einstellungen 259Java 2 Plattform 22Java Applet Plugin Enabler 268Java Applet.plugin 266Java Web Start 236java.applet 251

java.awt 121, 375java.awt.color.ICC_ColorSpace 563java.awt.datatransfer 169java.awt.dnd 169java.awt.event 124java.awt.FileDialog 552java.awt.headless 171java.awt.image.BufferedImage 563java.awt.print 375, 378java.awt.RenderingHints 557java.class.path 288java.endorsed.dirs 568java.ext.dirs 68java.home 66java.io.File 297java.io.FilenameFilter 138java.io.Serializable 169java.lang.reflect 141java.library.path 294, 318java.math 516java.net.preferIPv4Stack 445java.policy 263java.rmi 469java.runtime.version 548, 586java.sql 426java.text 514java.vendor 548java.vendor.url 548java.vendor.url.bug 548java.version 547, 585java.vm.vendor 548java.vm.version 547JAVA_APP_STUB 582JAVA_ARCHIVE_CLASSES 581JAVA_ARCHIVE_COMPRESSION 581JAVA_ARCHIVE_TYPE 581JAVA_CLASS_SEARCH_PATHS 581JAVA_COMPILER 580JAVA_COMPILER_DEBUGGING_

SYMBOLS 580JAVA_COMPILER_DEPRECATED_

WARNINGS 580JAVA_COMPILER_DISABLE_

WARNINGS 580JAVA_COMPILER_FLAGS 580JAVA_COMPILER_SOURCE_VERSION

580

Page 88: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

611Index

JAVA_COMPILER_TARGET_VM_VERSION 580

JAVA_FORCE_FILE_LIST 582JAVA_HOME 65, 414, 543JAVA_LAUNCHER_VERBOSE 207JAVA_MANIFEST_FILE 581JAVA_SOURCE_FILE_ENCODING 580JAVA_SOURCE_PATH 582JAVA_SOURCE_SUBDIR 582JAVA_USE_DEPENDENCIES 582Java13Adapter 140Java13Handler 139, 140Java14Adapter 163Java14Handler 163Java2D 556JavaApplet.h 325JavaApplicationStub 206, 210, 395JavaBrowser 62, 410javac 38, 63, 370, 512, 543, 580JAVAC_DEFAULT_FLAGS 580JavaClasses 581JavaComm 301javaconfig 68JavaConfig.plist 68JavaConnect 281JavaControl.h 325Javadoc 410, 477JavaEmbedding.h 325javah 310, 312JavaMonitorsInStackTrace 569javap 406JavaPluginCocoa.bundle 266JavaScript 242, 256, 274

globales Objekt 276window 276

JavaScriptCore 266JavaScript-URL 281JavaServer Pages 445, 453JavaSound 374

Audio-Eingabe 375JavaSpeechFramework.jar 343JavaSpellingFramework.jar 345JavaVM 322JavaVM.framework 312JavaVMInitArgs 322JavaVMOption 322javaw.exe 186javax.ejb 469

javax.imageio 354javax.jnlp 248javax.media 362javax.media.j3d 356javax.media.jai 353javax.microedition 485javax.naming 472javax.print 375javax.rmi 472javax.servlet 446javax.servlet.http 446javax.sound 375javax.sql 426javax.swing 147, 251, 272javax.swing.plaf.metal.

MetalLookAndFeel 144JAWS 234, 591

Desktop-Integration 236Programm-Manager 235Programmname 239Sicherheit 245

JayBird 440JBindery 537, 539JBoss 78, 464

beenden 467server/default/deploy 476starten 465Workbook 478

jboss-j2ee.jar 474, 475JBuilder 107

Versionen 6,7, X und 2005 107Versionen 8 und 9 108

JCavaj 403JCheckBoxMenuItem 153jclasslib 407JComboBox 167JComponent 120JDBC 423, 426, 428, 591

Adresse 428Treiber 427, 437, 439URL 428

JDBC-ODBC-Bridge 441JdbcOdbcDriver 441JDesktopPane 143JDeveloper 108JDialog 120

Menüzeile 163

Page 89: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index612

JDirect 324, 325, 349, 536Version 2 und 3 326

JDirect_MacOSX 325JDK 23, 57, 58, 531, 591JDKClasses.zip 91JDO 423, 591jEdit 111Jelly 396Jetty 445, 465Jext 112JFC 119, 537JFileChooser 165JFileChooser.appBundleIsTraversable

166JFileChooser.packageIsTraversable 166JFrame 120, 147

Rahmen 134JGoodies 171JIIO 354Jikes 412, 580, 581

Xcode 413JIKES_DEFAULT_FLAGS 581JIKESPATH 413JIMI 354JInternalFrame 143JIT-Compiler 22, 575JJEdit 113JLabel 161JManager 324, 325, 536JmDNS 305JMenu 147, 148JMenuBar 148JMenuItem 147, 149, 153JMF 362jmf.jar 362JMFRegistry 362JMX 465JNDI 591JNI 309, 339, 349, 536, 569

Abhängigkeiten von Bibliotheken 319

Bibliothek 67Bundle 319Mac OS X 10.0 319Pfad für Bibliotheken 317Suchpfade 317Xcode 310

JNI, Bibliothek 246

jni.h 312, 316, 322JNI_CreateJavaVM() 322JNI_GetDefaultJavaVMInitArgs() 322JNI_VERSION_1_2 322JNI_VERSION_1_4 322JNIDirect 326JNIEnv 316, 322jnilib 311JNLP 234

Developer's Pack 248jnlp.jar 248JNLP-API 248JNLP-Datei 238JobAttributes 375JOGL 359jogl.jar 359JOptionPane 120, 133JPanel 120JPEG 354JPEG2000 354JProfiler 408JRE 23, 58, 176, 249, 260, 591JRendezvous 305JRootPane 134JRun 464JSA 566, 576JScrollPane 159JSException 276JSObject 275

call 276eval 277getMember 277getWindow 276

JSP 445, 453Ausdruck 454Direktive 454Element-Bibliothek 455Expression 454Scriptlet 454Standard Tag Library 455Tag Library 455

JSP-Container 445, 454JSR 541JSTL 455JTA 591JTabbedPane 166JTextArea 159JTS 591

Page 90: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

613Index

JTxtCmpontDrvr 345JUG 70JUnit 398

Eclipse 402Xcode 401

Just-in-time-Compiler 22JVM 22, 38, 64, 321, 536

Optionen 565Version 194

JVMVersion 212, 216, 551JWS 60

KKapselung 519Karteireiter 166, 553KDE 266Kennung 559Kernel 591KEY_ANTIALIASING 557KEY_FRACTIONALMETRICS 557KEY_INTERPOLATION 557KEY_RENDERING 557KEY_TEXT_ANTIALIASING 557Key4J 404KeyEvent 127, 149Keystore 246KeyStroke 149keytool 246KHTML 266Kilobyte Virtual Machine 484KJS 266Klasse 275, 509

abstrakte 524anonyme 126, 527dynamisch laden 289innere 124, 527lokale 527Typ 289

Klassenbibliothek 22Klassendatei 39, 512Klassendatei � s. class-DateiKlassendiagramm 416Klassenhierarchie 62Klassenlader 139, 289Klassenmethode 513Klassenname 510

voll qualifiziert 176

Klassenpfad 51, 66, 68, 92, 176, 197, 212, 244, 288, 387, 401, 413, 567, � s. Classpath

KodakCMM 563Kodierung 209, 549Kommandozeile 38, 176Kommandozeilenparameter 514Kommentar 510Kompatibilität 292Komponente 120Komponentenmodell 463Konfiguration 483Konfigurationsdatei 52Konsole 41, 87, 185, 258, � s. ConsoleKonstante 522Konstruktor 519Konstruktorverkettung 521Kontakt 17Kontext 474Kontext-Klick 136Kontext-Popup-Menü 80, 135Kontrollfelder 532Kontrollkästchen 120kooperativ 537Kopierschutz 404kTemporaryFolderType 330KVM 484, 490

LL&F 142Label 129LAF 142, 591Landeskennung 157Länge von Dateinamen 294Laufwerk 29

virtuelles 220Laufzeitfehler 88Laufzeitparameter 259Laufzeitumgebung 22, 321, 513Laufzeitverhalten 408LaunchServices 202Layout-Manager 120, 253, 274

Positionsangabe 126ld 318learnWord() 347Legacy-Target 90LF 294LGPL 590

Page 91: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index614

lib 67, 311LIBRARY_STYLE 319line.separator 294, 548LineBreak 177Linefeed 294, 548Link 31, 591LINKED_CLASS_ARCHIVES 581Linker 318, 325Linkliste 14Linux 23, 24, 55, 58, 302Listener 121, 124LiteSwitch 28LiveConnect 274

Verfügbarkeit 281live-resize 553ll 41LOAD 137loadLibrary() 310LOCAL_ADMIN_APPS_DIR 583LOCAL_APPS_DIR 584LOCAL_DEVELOPER_DIR 584LOCAL_LIBRARY_DIR 584Locale 157localhost 239, 449log4j 62, 465loggc 575lokale Klasse 527lokale Variable 515Lokalisierung 149, 157, 192, 210, 218,

591Look & Feel 56, 144

im Programmcode setzen 145lookup() 472LSBackgroundOnly 171LSHasLocalizedDisplayName 219lsMac 199

MMac 591Mac OS

Extended Format 69Java 59Updates 538Versionen 8 und 9 23, 49, 531

Mac OS X 23Application Bundle 187Applikation 187Emulation 13

Java-Struktur 60Systemarchitektur 55Version 10.1 35Versionen 586

Mac OS X Server 24, 464/etc/hostconfig und MYSQL 435Dokumentation 479MySQL 432MySQL-StartupItem 434

MAC-Adresse 310, 591Mach-O 318MACINTOSH 580Macintosh Look & Feel 142Macintosh Runtime for Java 23MacLookAndFeel 144MacRoman 296, 549MacSOUP 46MagicDraw 417Mailingliste, java-dev 46main() 514

Argument-Array 132main.m 331, 337Main-Class 184, 238MainClass 212, 216, 550MainMenu.nib 331make 310, 385, 412Makefile 310makeKeyAndOrderFront() 337man pages 42Manifest 183, 238, 391, 492MANIFEST.MF 183markMisspelledWords() 346Maske 188Math 516Maustasten 30Maven 396MAVEN_HOME 397MaxFDLimit 569MaxHeapFreeRatio 574MaxNewSize 574MaxPermSize 575MAYSCRIPT 279MBean 465MDI 29, 143, 591ME4SE 496Media Access Control 310Mehrfachvererbung 521Mehrprozessorsystem 575

Page 92: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

615Index

Menu 127MenuBar 127MenuItem 127Menüpunkt mit Häkchen 153MenuShortcut 127Menüzeile 27, 148, 181, 535, 551, 553

AWT 127, 134JDialog 163ohne offene Fenster 148Swing 143, 162

Merge 92Meta Package 227META_MASK 150Metadaten 327, 477META-INF 183, 475metainf 475Metal 142, 146MetalLookAndFeel 144Meta-Programmierung 290METHOD 456Method 289Methode 513

veraltet 328Metrowerks CodeWarrior 110MicroEmulator 496Microsoft 267Microsoft Office 11MIDI 375MIDlets 485

beenden 489Formular anzeigen 489implementieren 488JAR-Archiv 491Zustand 489

MIDlet-Suite 492MIDP 484, 591

API 486Applikation 484Bluetooth 500Emulator 486, 494, 507Ereignisbehandlung 507Farbe 506Game Action 507Grafik 506Referenz-Implementation 485, 496RMS 493Unicode 504

MIME-Typ 204, 217, 243, 447, 502

MinHeapFreeRatio 574Minimal.app 596MisFox 200MisspelledWord 347mixed 576mn 573Mnemonics 165modaler Dialog 120Model, View, Controller 121module 473more 184MouseAdapter 135MouseEvent 135MouseListener 136mousePressed() 135mouseReleased() 135Movie 362, 366, 371MovieController 372

play() 373Mozilla 46, 259, 268, 281MP3 374MPEG 362mpkg 227MRJ 23, 49, 59, 91, 121, 328, 531, 586,

591FAQ 536SDK 539

MRJ Software Development Kit 324mrj.version 49, 548, 586MRJAboutHandler 122, 130, 552MRJAdapter 131, 147

openURL() 300MRJApp.properties 192, 215, 550MRJAppBuilder 193MRJApplicationUtils 123MRJClasses 59, 91MRJFileUtils 300, 328, 330MRJOpenApplicationHandler 122, 131MRJOpenDocumentHandler 123, 131,

205MRJOSType 328MRJPluginCarbon 281MRJPrefsHandler 123, 131MRJPrintDocumentHandler 123MRJQuitHandler 123, 132MRJToolkit 23, 536MRJToolkit.jar 328MRJToolkitStubs 139, 329

Page 93: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index616

ms 573Multimedia 365Multiple Document Interface 143Multitasking 537Musik 366, 374mv 179MVC 121, 333, 591mx 573MySQL 432, 459

beenden 436grafische Oberflächen 437JDBC-Treiber 437starten 435

mysql 436MySQL Manager 432mysqladmin 435MYSQLCOM 434mysqld_safe 435mysqldump 437mysqlimport 437

NNAME 279Namensdienst 463nanoTime() 302NanoTimer 302narrow() 472native Routinen 309, 325Navigator 267, 274nearestneighbor 557net.java.games.jogl 359NetBeans 103, 206

Launcher 104NetInfo 433, 591NetInfo Manager 432, 438Netscape 267, 274, 281netscape.jar 277netscape.javascript 275Netzwerkkarte 310Netzwerkkommunikation 295Netzwerkkonfiguration 302Netzwerkverbindung 240never 166newInstance() 141, 290, 291Newline 548NewObjectArray() 323NewRatio 574

newrt.jar 543Newsgroup 530NewSize 574NewSizeThreadIncrease 576Newsreader 46NeXT 57, 269next() 428NeXTSTEP 331, 592NeXTSTEP-Konfigurationsdatei 450NFS 297nib4j 340NIB-Datei 331, 337, 338, 592niutil 433nm 315noclassgc 575NORMAL 154Normalisierung 426NORTH 125NPAPI 325NSAppleEventDescriptor 341NSAppleScript 340NSApplicationMain() 337NSJavaNeeded 339NSJavaPath 339NSJavaRoot 339NSMenu 555NSMutableDictionary 341NSObject 333NSSpeechRecognizer 344NSSpeechSynthesizer 344NSSpellChecker 345NSWorkspace 300NumberFormat 514

OOberflächendesign 142Oberklasse 520Obfuscator 404, 508OBJECT 255Objective-C 57, 330, 333, 589

id 334Objekt 518Objektdatei 318objektorientierte Datenbank 423Objektvariable 519OBJROOT 579ODBC 441, 592

Page 94: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

617Index

ODBC Administrator 441ODBMS 592Office 11offline-allowed 240Öffnen mit 179OmniCore CodeGuide 106OmniWeb 269OO 592OOA 592OOD 592OODB 423OOP 592open 297, 298, 300Open Database Connectivity 441Open Source 56, 592OpenGL 56, 358, 381, 558OpenQTJ 373OpenTalk 302openURL() 300Opera 270operationFailed() 304Optimierung 405OptimizeShapes 558Option-Taste 16Oracle 440, 442, 539

JDeveloper 108Oracle 10g 440Ordner 30, 592Organizer 483, 500os.arch 548os.name 48, 548, 585os.version 548OSA 342osalang 342osascript

AppleScript 342Sprachausgabe 344

OSXAdapter 164osxutils 199OTHER_JAVA_CLASS_PATH 581otool 321Outlet 333, 335, 338

Java 337OutOfMemoryError 538Output Files 93OutputStreamWriter 296<oXygen⁄> 417

Ppack() 123Package 67, 254, 510, 592PACKAGE_TYPE 582packageIsTraversable 166PackageMaker 192, 223PageAttributes 375PageFormat 379, 380paint 253Paket 67, 510, 592

anonymes 511Installation 223Java 187, 254Programm 187, 190

Paket � s. PackagePaket-Bit 187Paketinhalt zeigen 190Paketname 176Palm Desktop 500PalmOS 500Panel 120, 125Panther 24, 592Papierformat 377parallele Schnittstelle 301PARAM 254, 261Parameter 550

formale 513Partition 31, 592passwd 433PATH 69, 386, 414path.separator 294, 548PB 76, 592pbdevelopment.plist 582pbhelpindexer 85pbxbuild 87, 577PDA 483, 500PDF 56, 190, 377

anzeigen 298erzeugen 299Plugin 299sichern als 299

PearPC 13Perf 301Perforce 94Performance Pack 362Performanz 408Permanente Generation 575Permission 263

Page 95: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index618

Persistenz 463, 467, 592Personal Web Sharing 242, 257, 304Petstore 62Pfadangaben 35, 51

im Buch 596Pfadtrennzeichen 294pg_ctl 438Photoshop 188PHP 445pico 37PICT 354, 373, 374Pixie 189pkg 224PkgInfo 191, 207, 211, 582PKGINFO_FILE 582PLAF 142, 592PLAIN_DIALOG 134Plattformunabhängigkeit 287, 309Player 363plist 54, 208, 214, 450Pluggable Look & Feel 142Plugin 59, 60, 65, 255, 258, 277, 325,

536deaktivieren 266Einstellungen 259Java Embedding 259

PNG 189, 354, 492Policy 263policytool 264Polymorphismus 523POP3 295Popupmenü 135Popup-Trigger 136Port, 8080 449Portabilität 287, 309PortableRemoteObject 472Poseidon 417POSIX 347, 592PosixSuites 347POST 456POSTGRES 439PostgreSQL 438

beenden 439JDBC-Treiber 439starten 438StartupItem 439

Post-Inkrement 517

PowerBook 11PowerPC 548PPC 23, 531, 548Pramati Server 464PRC Converter 500PRC-Datei 500Prebinding 319Preferences 52Prefix.h 331preverify 490, 491, 494Primärschlüssel 425Primary Key 425primitiver Datentyp 515print() 295, 379, 380, 514Printable 379PrintCompilation 576printenv 69PrinterJob 379printf 546PrintJavaStackAtFatalState 569PrintJob 376

end() 376println() 295, 514PrintSharedSpaces 566, 576printStackTrace() 472PrintStream 295PrintTenuringDistribution 575PrintWriter 295, 446private 514Process 343Processing 348processMouseEvent() 136PRODUCT_NAME 389, 392, 579prof 569Profil 484Profiler 408Programm 509

deinstallieren 187löschen 187

Programmabbruch 529Programmcode 191Programme 31

Ordner 220, 225Programmiereditor 111Programmierrichtlinien 510, 530Programm-Manager 235Programm-Menü 27, 130, 180, 211

Page 96: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

619Index

Programmname 180, 239, 552Programmpaket 166, 187, 190, 236,

317, 338, 394, 582, 592, 596im Dateiauswahl-Dialog 138von Hand erzeugen 206

Programmsymbol 180, 188, 211, 236ProGuard 405Project Builder 24, 42, 62, 76, 90, 203,

577Project Rave 104project.xml 397PROJECT_NAME 578Projekt 90, 387

Gruppe 80Index 83Struktur 79Template 77Typ 77

Projektplanung 416Projektverwaltung 75Prolog 209Propeller-Taste 16Properties 214, 293properties, Umlaute und Sonder-

zeichen 158properties-Datei 158Property 547Property List 208, 219, 592Property List Editor 214protected 513Protokoll 525Prototyp 275Proxy

HTTP 259HTTPS 259

Proxy-Einstellung 250Prozedur 513prozedurale Programmierung 513Prozess 33, 533, 537Prozessverwaltung 347, 535ps 33, 533psmp-Datei 225psql 438pthread 324public 513put() 166putClientProperty() 160, 166PWD 579

pwd 53Python 112

QQDRect 374QT 365QTCanvas 367QTException 368QTFactory 368, 372QTFile 374QTImageProducer 374QTJ 366QTJava 366, 374, 556

Versionen 366Xcode 369

QTJava.zip 369QTSession 367, 369, 371, 373QTUtils 374quality 557Quaqua-Look&Feel 172Quartz 56Quartz Extreme 196, 559Quelltext 411Quelltext-Datei 510Quelltextkodierung 83Quelltextverwaltung 94Query 424QuickTime 56, 362, 365, 381

Im- und Export 373Versionen 366

QuickTime for Java 366QuickTime Player 366quicktime.app.display 366, 367quicktime.app.display.FullScreen-

Window 556quicktime.app.view 366, 371quicktime.std 371

RRadio-Button 125Rational Rose 417RCEnvironment 94RDBMS 592Receipts 227Rechnerstart 31, 531, � s. BootenRechtschreibprüfung 36, 345Rechtsklick 80, 135ReduceSignalUsage 570

Page 97: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index620

Referenzdatentyp 516Reflection 139, 163, 289, 290registerAboutHandler() 123, 130, 552registerJava13Handler() 140registerJava14Handler() 163registerOpenApplicationHandle 123registerOpenDocumentHandle 123registerPrefsHandle 123registerPrintDocumentHandle 123registerQuitHandle 123reguläre Ausdrücke 22Relation 425relationale Datenbank 423remote 471Remote Method Invocation 469RemoteException 469Remote-Interface 469RenderDrawArc 562RenderDrawOval 562RenderDrawPolygon 562RenderDrawRect 562RenderDrawRoundRect 562RenderDrawShape 562RenderFillArc 562RenderFillOval 562RenderFillPolygon 562RenderFillRect 562RenderFillRoundRect 562RenderFillShape 562RenderGlyphs 563RenderImage 562Rendering Hint 556RenderLine 562RenderString 563RenderUnicodes 563Rendezvous 302, 592Repository 94ReservedCodeCacheSize 570reservierte Schlüsselwörter 509Resource Fork 188ResourceBundle 148, 157, 192Ressourcen, Zugriff 244RestartService() 450ResultSet 428, 429return 514Reverse Engineering 108Richtlinientool 264RIGHT 125

RMI 469Role 204, 217rollback() 430ROOT 452, 455, 457root 30, 579, 592Root Pane 134, 161ROOT-Kontext 452, 457Round Trip Engineering 108, 417round() 516rs 570RS232-Schnittstelle 301rt.jar 288, 405, 543Rückgabetyp 513Ruhezustand 533Run 87run() 130, 527Rundung 516runhprof 569Runnable 133, 527Runtime.exec() 297, 298, 299, 342RXTX 301

SSafari 266, 281safe_mysqld 435Sandbox 235, 245, 262SAVE 137Schaltfläche 120

Reihenfolge beim Mac 126Schleife 517Schlüssel 425Schlüsselwort 509Schnittstelle 123, 525Schrägstrich 69Schreibtisch 590SCM 94, 592Scriptlet 454Scrollbar 159SDK 463, 593Search Paths 91Security Policy 263Security-Manager 246Segmente 42Selbst-Referenz 520SELECT FROM 425, 428Separator 293Serializable 169serielle Schnittstelle 301

Page 98: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

621Index

Server 24, 234, 242Server � s. Web-ServerServer-Administration 464Server-Anwendungen 170Server-VM 566Service 450serviceFound() 303serviceLost() 304servlet.jar 475Servlet-Container 445, 448, 465ServletException 446Servlet-Kontext 457Servlet-Mapping 458Servlets 445, 446, 467, 472

Xcode 447Session 454, 467SessionBean 78, 467, 470SessionContext 470session-type 471setAccelerator() 149, 165setAutoCommit() 430setBackground() 134, 155setBounds() 155setContentType() 446setDirectory() 137setEnabled() 151setEnabledPreferencesMenu() 155setEnabledPrefs() 163setenv 65setExtendedState() 128, 154SetFile 199, 207, 223, 328setFile() 138setFilenameFilter() 138setFullScreenWindow() 554setHandled() 156, 164setHelpMenu() 127setJMenuBar() 149setLayout() 125setLocation() 123, 129setLookAndFeel() 145setMenuBar() 127setMenuBarVisible 555setMnemonic() 165setMode() 138setProperty() 549setReadOnly() 428, 430setRenderingHint() 556setResizable() 123

setSessionContext() 470setState() 128, 153Setter 519setUndecorated() 134, 155, 554setUp() 400setVisible() 124, 133setWindowDecorationStyle() 134sh 177Sharing 242SharingMenu 243Shark 409Sheets 38Shell 38, 40, 51, 64, 93, 176, 536, 593Shell Script Files 93Shell Script Target 90SHIFT_MASK 149Shift-Taste 16Shortcut 16, 28show() 134, 135showConfirmDialog() 133showDocument() 248, 272, 281showGrowBox 551showStatus() 271Sicherheit 463Sicherheitslücke 11Sicherheitsrichtlinie 263SIGHUP 570SIGINT 570Signale 570Signatur 211, 323, 525Signature 199Signieren 246, 262SIGQUIT 570SIGTERM 570SIGUSR1 570SIGUSR2 570SimpleDateFormat 514SimpleUniverse 356Sites 242Sitzung 467SKIP_INSTALL 578Skript 176, 593Skripteditor 340Skriptsprache 340, 413smallTabs 553Smart Group 80

anlegen 82SMB 297

Page 99: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index622

Soft Button 503Software-Aktualisierung 44, 249Softwareprozess 416Solaris 23, 24, 55, 302, 311Sonderzeichen 38Sound 374Source Control Management 94sourcepath 582Sources 92SOUTH 125Speech Framework 343speed 557Speicherauslastung 33Speicherschutz 535Speicherverbrauch 408Speicherverwaltung 519Spelling Framework 345SpellingChecker 347Spiele 359Splash-Screen 240Sprachausgabe 343SQL 424, 593

Abfrage 425SQL/J 423, 593SQLException 429src.jar 411SRCROOT 579ss 573Stack 573Stack Trace 41, 88, 569staff 579Standard-Klassenpfad 68Standardverzeichnisse 583Stapelverarbeitungs-Datei 177start() 130, 253Startpunkt 514startRealtimeChecking() 346StartService() 449Start-Tag 209, 254StartupItem 434, 439, 449

MySQL 434PostgreSQL 439

StartupParameters.plist 450Startvolume 31, 532, 593Stateful Session-Bean 468Stateless Session-Bean 468Statement 424, 428, 429static 513

statische Imports 545statischer Initialisierungsblock 311Steuerungsobjekt 121, 467Steuerung-Taste 16stop() 253StopService() 450String, getBytes() 296stringFlavor 169StringTokenizer 288Struts 459Stub 191Stub-Klasse 139, 163, 329su 438Subklasse 520Subroutine 513Subversion 94, 593Suchreihenfolge von Erweiterungs-

Bibliotheken 68sudo 592Suffix 593suggestGuessesForWord() 347Suite 347, 400Suite/P Toolkit 347Sun 22, 70

Bug Parade 292Sun Java Studio Creator 104sun.boot.class.path 288sun.cpu.endian 548sun.jdbc.odbc.JdbcOdbcDriver 441sun.misc.Perf 301super 521super() 521Superklasse 520Superuser 592, 593Superuser-Rechte 348SurvivorRatio 574Swing 22, 56, 119, 142, 251, 272, 291,

537, 593Anpassungen für andere Systeme

150Brushed Metal 168Cocoa 339Performanz 291Threads 274, 291Xcode 146

swing.defaultlaf 144swing.properties 144SwingSet2 142

Page 100: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

623Index

SwingUtilities 133, 145, 274invokeAndWait() 291invokeLater() 291

switch 517, 545Switcher 12, 371Sybase ASE 441symbolischer Link 589SYMROOT 578Synthesizer 344Sys 50, 140, 163, 585, 596

getHomeDirectory 53getJavaHome 66getLocalPrefsDirectory 53getPrefsDirectory 53getPrefsDirectory() 293getWorkingDirectory 53isAMac 50isLinux 50isMacOS 50isMacOSX 50isOS2 50isWindows 50

SystemcurrentTimeMillis() 301Kodierung 296nanoTime() 302Programmierumgebungen 57Property 48, 52, 214, 241, 246, 488,

547, 567System.exit 246, 262System.exit() 132System.gc() 575System.getProperty() 293System.loadLibrary() 311SYSTEM_ADMIN_APPS_DIR 583SYSTEM_APPS_DIR 583SYSTEM_CORE_SERVICES_DIR 583SYSTEM_DEMOS_DIR 583SYSTEM_DEVELOPER_APPS_DIR 583SYSTEM_DEVELOPER_DEMOS_DIR

583SYSTEM_DEVELOPER_DIR 583SYSTEM_DEVELOPER_DOC_DIR 583SYSTEM_DEVELOPER_GRAPHICS_

TOOLS_DIR 583SYSTEM_DEVELOPER_JAVA_TOOLS_

DIR 583

SYSTEM_DEVELOPER_PERFORMANCE_TOOLS_DIR 583

SYSTEM_DEVELOPER_UTILITIES_DIR 583

SYSTEM_DOCUMENTATION_DIR 583

SYSTEM_LIBRARY_DIR 583Systemabhängigkeit 309Systemanpassungen 47Systemarchitektur 55Systemeinstellungen 26, 532

Sprache 344Systemerweiterungen 534Systeminstallation 32, 42Systemordner 533SystemStarter 451Szene-Graph 357

TTabelle 423, 424Tabs 166, 553Tabulator 590Tag 209, 254Tag Library 455Taglib 455Target 80, 90, 387

Abhängigkeiten 90, 314aktives 80Cocoa Java Specific 339Cocoa Specific 339Legacy 90Pure Java Specific 338Typ 90

TARGET_BUILD_DIR 578TARGET_NAME 579TargetSuvivorRatio 574Task 387Tastatureingaben 27Tastaturkürzel 16, 28

AWT-Menüs 128Swing-Menüs 149

Tastaturkürzel � s. ShortcutTCP 303tcsh 39, 65, 177, 414tearDown 400TEMP_DIR 491, 579TEMP_FILES_DIR 579Template 24, 77

Page 101: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index624

temporärer Speicher 537temporäres Verzeichnis 330Tenured-Generation 574Terminal 38, 51, 176, 593Test First-Ansatz 398TestCase 398Testen 398Testfall 401TestRunner 400, 402TestSuite 398TEXT 328text/html 204text/plain 204textantialiasing 557Textausgabe 536TextEdit 35, 296, 298Textkodierung, Xcode 158Text-to-speech 343this 520Thread 130, 527, 528, 537, 576ThreadStackSize 576Thread-Synchronisation 569throw 529Ticker 505Ticks 326TIFF 354Tiger 24, 541, 593tiger 543tigerc 543Tilde 38title 239TKPLAFUtility 144TLAB 576toFront() 154Together Control Center 108Together Solo 108Tomcat 445, 448, 465Tomcat Monitor 452Tool 203Toolkit 149, 374, 376tools.jar 288top 33toString() 520, 521tr 177transaction-type 471Transaktion 431, 591Transaktionsverwaltung 463Transferable 169

Transform3D 357TransformGroup 357Transmit 244Transparenz 189Treiber, JDBC 427Trennzeichen

Dateien 293Pfadangaben 294

Trojaner 11TruBluEnvironment 533TRUE 161try 528TTS 343Typ einer Klasse 289TYPE_INT_ARGB 563Typecast 516, 589Type-Code 191, 199, 217, 296, 327Typumwandlung 516, 589

UÜber...-Menüpunkt 130Überladen 519Überschreiben 521Übersetzer 512, 589Übersetzung 149, 157, 192, 591,

� s. CompilerUDP 303UFS 297UI 119, 593ui.jar 288, 328, 329UIManager 145

put() 166Umgebungsvariable 65, 69, 94, 176UML 108, 113, 416, 593Umlaute 83Umschalttasten 28Unicode 192, 209, 219, 295

Escape-Sequenz 129, 158UninstalledProducts 578Unit-Test 398UNIX 11, 293, 295, 593UnsatisfiedLinkError 314unsichtbares Fenster 155UnsupportedLookAndFeelException

145Unterbrechungspunkt 88, 102Unterklasse 123, 520Unterpaket 512

Page 102: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

625Index

Unterprogramm 513Update 44updateComponentTreeUI() 145URI 456, 593URL 299, 593, 596URL-Clip 596USB 301USB-Docking-Station 500USB-Maus 80UseAltSigs 570usecolorsync 563UseConcMarkSweepGC 575usedebugkeys 561use-file-dialog-packages 553UseFileLocking 573useMDEF 553Usenet 46UseParallelGC 575User Interface 119user.dir 53user.home 52, 53USER_APPS_DIR 584USER_LIBRARY_DIR 584Users 31useScreenMenuBar 551, 553UseSharedGen 573UseSharedSpaces 576UseTLAB 576UseTwoImageLazyPixelConversion

563usr 30UTF-16 192, 219, 296UTF-8 209, 239, 296

VVariable 515variable Argumentlisten 545Vector 147veraltete Methode 328verbose 567Vererbung 520, 526

Klassenbasiert 275Prototyp-basiert 275

Verknüpfung 31version.plist 192Versionierung 94

Applet 261Installationspaket 227

Java Web Start 235Versions (Verzeichnis) 63, 198, 211Versionsangabe 194, 240Versionsverwaltung 94VERTICAL_SCROLLBAR_ALWAYS 159vi 37, 40Videodaten 362, 366Viewer 204, 217Virtual Machine 22Virtual Reality 366Virus 11VISE 230VisualParadigm 417VK_XXX 127, 149VM 22VMOptions 213, 216, 551, 565void 513Vollbildmodus 554vollqualifizierter Klassenname 511Volume 29, 220, 533, 593,

� s. Laufwerkdeaktivieren 221

Vorabversionen 46Vorschau 190VR 366

WW3C 255Wahl-Taste 16WAP 502WAR 385, 475war 459, 473, 475, 581web 473Web Sharing 304web.xml 452, 457, 458, 473, 475Webapplikation 78, 455, 457, 474Webapplikationsarchiv 459, 473webapps 452, 455, 457Web-Browser 60, 64, 234, 265, 299,

325WebCore 266WEB-INF 452, 457, 475WebKit 266, 269, 339Weblog 459WebLogic Server 464WebObjects 464, 479Web-Server 234, 302, 445Web-Sites 239, 242

Page 103: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

Index626

web-uri 473Weichzeichnen 556, 589WEST 125while 517WHITE 134Window 124window 276WindowAdapter 124windowClosing() 124, 365WindowEvent 124WindowListener 124, 363windowModified 160Windows 23, 24, 55, 57, 186, 267, 293,

295, 296, 302, 304, 311Wireless Toolkit 485, 494Word-Dokumente 35WorkingDirectory 213, 216, 550Wrapper 311Wurm 11Wurzel-Ebene 161Wurzelelement 209Wurzelverzeichnis 30Wurzelverzeichnis � s. root

XX Window System 486X11 486, 495

FAQ 508Xcode 24, 42, 62, 76, 186, 203, 245, 577,

593Ant 77, 388Ant-Projekttypen 393Applet 257AWT 122Build 86Cocoa Java 331Custom Build Command 389Debugger 88Dokumentation 84Editor teilen 82Eingabevervollständigung 83Executable 392, 401External Target 389Fehler und Warnungen 86Index neu erstellen 83Index Templates 84Java-API-Dokumentation 85

Jikes 413JNI 310JUnit 401Klassenhierarchie statt JAR-Archiv

186Konsole 87Lesezeichen 82LiveConnect 277Maven 397MIDlets 487QTJava 369Servlets 447Shark 409Suchen 83Swing 146Target löschen 389Tastenfunktionen 82Textkodierung 158Umlaute im Quelltext 83Unterbrechungspunkt 88Version 2.0 76Versionen 1.2 und 1.5 76XDoclet 477

Xcode Tools 42, 386xcodebuild 87, 577xcodeindex 84Xdock 180XDoclet 62, 78, 465, 477, 478

Xcode 477XML 22, 54, 208, 238, 279, 593

Dokument 214Editor 417Prolog 209Transformation 417

Xnoclassgc 409XP 398Xrun 569XrunShark 409XSL-FO 417XSLT 417

YYourSQL 437

ZZeichen, Kodierung 295Zeichen, zusammengesetzte 297

Page 104: Auf einen Blick - muchsoft€¦ · »Variable« oder »Schleife« anfangen können. Und den kompletten Umfang von Java zu berücksichtigen, kann nicht Ziel dieses Buches sein –

627Index

Zeichenkette 514Zeilenende 184, 294

umwandeln 177Zeilenumbruch 177, 294, 548Zeitmessung 301zentrieren auf dem Bildschirm 129Zeroconf 302

Zertifikat 246selbst-signiert 247

ZIP-Archiv 183Zugriffsrechte 32, 53, 178Zusicherung 570Zwischenablage 248