2 Den Code richtig organisieren

2 Den Code richtig organisieren
49
2
Den Code richtig organisieren
In diesem Kapitel diskutieren wir zunächst den Umgang mit den verschiedenen Elementen der Benutzeroberfläche: Editoren, Betrachtern
und Perspektiven. Anschließend behandeln wir die grundlegenden Ressourcentypen: Projekte, Verzeichnisse und Dateien.
Dann wenden wir uns wieder der Java-Programmierung zu. Diesmal geben wir »Hello World« nicht auf der Konsole aus, sondern über
die Soundkarte! Dabei behandeln wir Themen wie den Import und Export von Dateien und Archiven, das Assoziieren von Quelldateien zu
Binärdateien und die richtige Einstellung der Projekteigenschaften.
2.1
Die Workbench
Wie schon in der Einführung erwähnt, ist das Java IDE nur eines von
vielen Plug-ins für die Eclipse-Workbench. Insofern ist die EclipseWorkbench völlig unabhängig von Java. Schalten wir also einmal aus
der Java-Perspektive zurück in die Ressourcen-Perspektive (Abbildung
2.1). Dort, wo in der Java-Perspektive der Package-Explorer zu sehen
war, sehen wir nun den Navigator. Die einzelnen Packages sind verschwunden, stattdessen sehen wir eine Struktur geschachtelter Verzeichnisse.
Abb. 2-1 Der Navigator zeigt Projekte, Verzeichnisse und Dateien. Wir haben hier
schon etwas vorgegriffen: Das dargestellte Projekt wird erst in Kapitel 3 entwickelt.
50
2 Den Code richtig organisieren
2.2
Ressourcen
Der Navigator der Eclipse-Workbench zeigt einen Überblick über die
von der Eclipse-Workbench verwalteten Ressourcen und gestattet die
Navigation in der Menge der Ressourcen.
2.2.1
Ressourcentypen
Die Workbench kennt drei verschiedene Ressourcentypen:
❑ Projekte. Ein Projekt bildet jeweils das Wurzelverzeichnis für einen
Verzeichnisbaum. Projekte können Verzeichnisse und Dateien enthalten.
❑ Verzeichnisse. Verzeichnisse können andere Verzeichnisse und
Dateien enthalten. Verzeichnisse können beliebig tief geschachtelt
werden.
❑ Dateien. Dateien bilden die Endpunkte von Ressourcenbäumen,
d.h., eine Datei enthält keine weiteren Ressourcen.
2.2.2
Wo Ressourcen gespeichert werden
Alle Ressourcen werden direkt im Dateisystem des ausführenden Computers gespeichert. Dies ist anders als bei VisualAge, wo die Ressourcen
der Workbench in einem Repository gespeichert waren. Bei Eclipse entspricht jedoch die Struktur aus Projekten und Verzeichnissen direkt einer entsprechenden Verzeichnisstruktur auf dem ausführenden Computer. Das hat Vorteile bezüglich Crash-Sicherheit und Datensicherung.
Der Speicherort für die Ressourcen der Workbench ist standardmäßig das Verzeichnis \eclipse\workspace. Hier ist jedes Projekt in einem
entsprechenden Unterverzeichnis enthalten. So ist beispielsweise die
Ressource BaseSynthesizer.java im Pfad \eclipse\workspace\DukeSpeaks\
com\sun\speech\enginge\synthesis\BaseSynthesizer.java gespeichert. Freilich lässt sich das Workspace-Verzeichnis mit Hilfe des Kommandozeilen-Parameters -data auch an anderen Orten einrichten, so z.B. mit
eclipse.exe -data C:\myOldWorkSpace
2.2.3
Ressourcen synchronisieren
Refresh
Gelegentlich kommt es vor, dass der Zustand der Dateien in \eclipse\
workspace nicht dem Kenntnisstand von Eclipse entspricht, denn Eclipse
speichert Metadaten über die Ressourcen der Workbench im Verzeich-
2.2 Ressourcen
nis \eclipse\workspace\.metadata. Wurde jedoch eine Datei der Workbench an Eclipse vorbei verändert, z.B. durch die Anwendung eines externen Werkzeugs, so kann es passieren, dass die Metadaten in
.metadata nicht mehr mit dem aktuellen Zustand einer Ressource übereinstimmen.
Das ist nicht weiter schlimm. In diesem Fall führt man eine Synchronisierung auf die betroffene Ressource durch. Man selektiert die
betroffene Ressource im Navigator und wendet die Kontextfunktion
Refresh an. Übrigens lässt sich diese Funktion nicht nur auf einzelne
Dateien, sondern auch auf ganze Verzeichnisse oder Projekte anwenden.
2.2.4
Navigation
Die folgenden Kontextfunktionen stehen im Kontextmenu des Navigators für die Navigation zur Verfügung:
❑ Go into. Diese Funktion reduziert die aktuelle Sicht auf den Inhalt
des ausgewählten Projekts oder Verzeichnisses. Wenn man Tausende von Ressourcen in der Workbench hat, weiß man diese Funktion zu schätzen.
❑ Go to>Back. Wechselt zur vorigen Sicht. Diese Funktion ist auch in
der Toolbar des Navigators enthalten (Pfeil nach links).
❑ Go to>Forward. Macht Go to>Back wieder rückgängig. Diese
Funktion ist auch in der Toolbar des Navigators enthalten (Pfeil
nach rechts).
❑ Go to>One level up. Geht ins nächst höhere Verzeichnis. Diese
Funktion ist auch in der Toolbar des Navigators enthalten.
❑ Go to>Resource. Bietet eine alphabetische Auswahlliste von Res-
sourcen und springt dann zur ausgewählten Ressource.
❑ Open in new Window. Wirkt wie die Funktion Go into, nur dass
ein weiteres Fenster (mit einer kompletten Workbench!) geöffnet
wird, bei der nur der Inhalt des ausgewählten Projekts oder Verzeichnisses im Navigator gezeigt wird.
Das Menü der Toolbar (unter dem kleinen Dreieck) bietet noch einige
zusätzliche Funktionen:
❑ Mit der Sort-Funktionen können die Dateien nach Name oder Typ
sortiert angeordnet werden.
❑ Mit der Filters...-Funktion können Dateien mit bestimmten Datei-
erweiterungen aus dem Navigator ausgeblendet werden.
51
52
2 Den Code richtig organisieren
2.3
Öffnen mit ...
Neue Assoziation festlegen
Assoziationen
Der Typ einer Datei wird aus der Dateierweiterung bestimmt. In
Abbildung 2.1 sehen wir textbasierte Dateien wie die .java- und .htmlDateien und die Datei Makefile, aber auch binäre Dateien wie die
.class-Dateien. Dateierweiterungen bestimmen, was geschieht, wenn
eine Datei geöffnet wird.
Wenn wir z.B. eine .java-Datei mit der rechten Maustaste anklicken, so erhalten wir ein Pop-up mit den Kontextfunktionen. Wählen
wir dort das Untermenü Open with ..., erhalten wir ein weiteres Popup mit Editoren. Im ersten Abschnitt sehen wir den für diese Datei aktiven Editor (normalerweise den Java-Editor). Im zweiten Abschnitt sehen wir alle für diesen Dateityp registrierten Editoren, darunter auch
Text Editor und System Editor. Der Texteditor ist der im Eclipse SDK
enthaltene Texteditor. Dieser kann für alle textbasierten Dateien benutzt werden. Der Systemeditor ist der Editor, der auf dem ausführenden Betriebssystem für den jeweiligen Dateityp registriert ist. Eclipse
kann derartige externe Editoren aus der Workbench heraus starten:
Öffnen wir beispielsweise eine HTML-Datei, wird ein Webbrowser gestartet.
Im Wesentlichen werden diese Dateiassoziationen (welcher Editor
mit welchem Dateityp) von den in Eclipse installierten Plug-ins bestimmt. Es ist jedoch auch möglich, manuell solche Assoziationen hinzuzufügen. Hierzu ruft man die Funktion Window>Preferences>File
Associations auf. Im oberen Fenster sieht man nun eine Liste der registrierten Dateierweiterungen. Mit Hilfe der Add- und Remove-Buttons
kann man neue Dateierweiterungen hinzufügen oder löschen. Im unteren Fenster erscheinen die registrierten Editoren für die gerade selektierte Dateierweiterung. Auch hier können Editoren hinzugefügt oder
gelöscht werden. Mit dem Default-Button kann ein bestimmter Editor
zum Standardeditor erklärt werden.
Drückt man den Add-Button, so erhält man zunächst eine Liste der
internen, in Eclipse installierten Editoren. Markiert man das Feld
External Programs, erhält man die Liste der im ausführenden Betriebssystem registrierten Programme (siehe Abbildung 2.2). Durch einen
Doppelklick auf eines dieser Programme wählt man es als neuen Editor
aus.
2.4 Packages
Abb. 2-2 So können Dateiassoziationen definiert werden. Hier haben wir zunächst
die Dateierweiterung *.html hinzugefügt und assoziieren dann Microsoft Frontpage
mit diesem Dateityp.
2.4
Packages
Schalten wir wieder zurück in die Java-Perspektive, ergibt sich ein anderes Bild. Der Package-Explorer zeigt die verschiedenen Projekte mit
ihrer Package-Struktur und den Kompiliereinheiten.
2.4.1
Verzeichnisse und Packages
Packages sind keine realen Ressourcen, sondern virtuelle Objekte. Die
Package-Struktur eines Projekts ergibt sich aus den package-Deklarationen am Beginn jeder Java-Quelldatei.
Die Java-Spezifikation verlangt allerdings, dass sich die PackageStruktur isomorph auf eine Verzeichnisstruktur abbilden lässt. So müssen – wie in Abbildung 2.3 gezeigt – alle Ressourcen des Package
com.sun.speech.engine.text im relativen Pfad com/sun/speech/engine/text
gespeichert sein. In Eclipse ist diese Pfadangabe immer relativ zum
Quelltext-Wurzelverzeichnis für das Projekt. Der relative Pfad com/sun/
speech/engine/text entspricht daher dem physischen Pfad \eclipse\
workspace DukeSpeaks\com\sun\speech\engine\text.
53
54
2 Den Code richtig organisieren
Abb. 2-3 Jedes Package kann eindeutig auf einen Knoten im Verzeichnisbaum
abgebildet werden. Kompiliereinheiten im Package-Explorer können dagegen aus
mehreren Ressourcen bestehen: aus einer Quelldatei und einer oder mehrerer
Binärdateien. Im Falle der Klasse AnimatedAudioPlayer gibt es zwei Binärdateien –
eine für AnimatedAudioPlayer selbst und eine für die innere Klasse
JavaClipLineListener.
2.4.2
Navigation
Der Package-Explorer verfügt über ähnlich Navigationsfunktionen
wie der Navigator (siehe Abschnitt 2.2.4). So gibt es auch hier die Kontextfunktionen Go into und Open in new Window, in der Toolbar gibt
es Buttons für die Funktionen Go to>Back, Go to>Forward und Go
to>One level up. Zusätzlich lässt sich die Ansicht auf ein Working Set
(eine vom Benutzer definierte Auswahl von Ressourcen) beschränken.
Wichtig ist auch die Taste Link with Editor (links neben dem Dropdown-Menü). Ist sie gedrückt, ist der Package-Explorer immer mit
dem jeweils aktiven Editor synchronisiert, d.h., bei einem Wechsel zwischen Editoren wechselt auch die Selektion im Package-Explorer entsprechend.
Außerdem besteht noch die Möglichkeit, den Browser für die Typenhierarchie zu öffnen.
2.4.3
Hierarchie
Die Typhierarchie zeigt die Super- und Subtypen für Klassen und Interfaces an. Dabei besteht die Möglichkeit, entweder die Sicht nur auf Super- oder Subtypen zu beschränken oder die komplette Hierarchie anzuzeigen. Mit der History-Funktion kann man rasch zwischen den
verschiedenen Sichten wechseln oder vorher angezeigte Hierarchien
noch einmal anzeigen (Abbildung 2.4).
2.5 Der Outline-View
Abb. 2-4 Der Hierarchie-Browser besteht aus zwei Fenstern. Im oberen Fenster wird
die Typenhierarchie angezeigt, im unteren Fenster werden die Felder und Methoden
des selektierten Typs angezeigt.
In der Toolbar des unteren Fensters findet man einige weitere Funktionen. Der erste Button verändert das obere Fenster und zeigt dort nur
die Typen an, die das im unteren Fenster selektierte Feld bzw. die selektierte Methode implementieren. Der zweite Button bewirkt, dass im
unteren Fenster auch die ererbten Methoden und Fenster des aktuellen
Typs angezeigt werden. Die restlichen Buttons verhalten sich wie die
entsprechenden Buttons des Outline-Fensters (siehe nächster Abschnitt).
Der Hierarchie-Browser erweist sich insbesondere dann als nützlich, wenn man vorhandene Projekte oder Bibliotheken analysieren
will. Beim Erstellen eines neuen Projektes wird man ihn in der Regel
erst bei fortgeschrittenem Projektstand benötigen.
2.5
Der Outline-View
Der Outline-View (Abbildung 2.5) gestattet die Navigation innerhalb
einer Quelldatei. Generell ist der Outline-View nicht auf Java-Programme beschränkt, sondern steht – je nach installierten Plug-ins –
auch für andere Dateitypen zur Verfügung.
55
56
2 Den Code richtig organisieren
Bei Java-Programmen stellt der Outline-View sowohl die Felder
und Methoden als auch die import-Anweisungen dar. Sind innere Klassen definiert, werden auch diese Klassen dargestellt: Die Hauptklasse
und die inneren Klassen bilden eine Baumstruktur.
Durch einen einfachen Klick auf ein im Outline-View dargestelltes
Feld oder eine Methode wird der Editor auf die Definition des Feldes
bzw. der Methode positioniert. Darüber hinaus gibt es noch eine Reihe
weiterer nützlicher Funktionen. Doch beginnen wir mit der Darstellung der Felder und Methoden im Outline-View.
2.5.1
Darstellung
Abb. 2-5 Die verschiedenen Buttons der Outline-Toolbar erlauben es, bestimmte
Elemente aus dem Outline-View herauszufiltern. Mit dem Sortieren-Button können
Felder und Methoden alphabetisch geordnet werden (andernfalls gilt die
Reihenfolge in der Quelldatei).
2.5 Der Outline-View
57
Das erste Icon vor einem Eintrag im Outline-View kennzeichnet die
Art des Eintrags (Package, import-Anweisung, Interface, Klasse, Methode, Feld) und die Sichtbarkeit (public, protected, private).
import-Anweisung
Icons
Interface
Klasse
öffentliche Methode (public)
geschützte Methode (protected)
private Methode (private)
Standardmethode (ohne Modifikation)
öffentliches Feld (public)
geschütztes Feld (protected)
privates Feld (private)
Standardfeld (ohne Modifikation)
Zusätzlich zu diesem ersten Icon können noch weitere Icons angezeigt
werden:
Konstruktor
statisches Element (static)
unveränderbares Element (final)
überschriebenes Element
Die Darstellung des Outline-Views kann über Window>Preferences>Java>Appearance beeinflusst werden:
❑ Show method return types. Zeigt den Ergebnistyp von Methoden
im Outline-View an.
❑ Show override indicators... Zeigt den
-Indikator für überschrei-
bende Methoden an.
❑ Show member in Package Explorer. Ist diese Option gesetzt, so
erscheinen Methoden und Felder auch im Package-Explorer als
Kindelemente von Klassen und Interfaces. Die meisten Funktionen
des Outline-View stehen dann auch dort zur Verfügung.
2.5.2
Kontextfunktionen
Im Outline-View gibt es eine Reihe von Kontextfunktionen. Die wichtigsten sind auch auf der Toolbar des Outline-View als Buttons vorhanden (siehe Abbildung 2.5). Hier ist eine Übersicht über die vorhandenen Kontextfunktionen:
58
2 Den Code richtig organisieren
❑ Open Type Hierarchy. Zeigt die Typenhierarchie für das ausge-
wählte Element (siehe Abschnitt 2.4.3). Diese Funktion kann nicht
nur auf einzelne Typen, sondern auch auf ganze Packages oder Projekte angewandt werden.
❑ Open Supertype Implementation. Diese Funktion erscheint nur bei
überschreibenden Elementen. Bei Ausführung der Funktion wird
das überschriebene Element im Editor geöffnet.
❑ Show in Package Explorer. Synchronisiert den Package-Explorer
mit dem ausgewählten Element im Outline-View.
❑ Cut, Copy, Paste, Delete. Die üblichen Kopier- und Löschfunktio-
nen, angewandt auf das im Outline-View ausgewählte Element.
❑ Refactor>...
Verschiedene Funktionen zum Umorganisieren von
Code (siehe Abschnitt 1.8.2)
❑ Add JavaDoc Comment. Fügt einen JavaDoc-Kommentar zum
selektierten Element hinzu (siehe Abschnitt 1.6.3).
❑ Generate Getter and Setter. Diese Funktion erscheint nur bei Typen
mit Feldern und erlaubt die Erzeugung von Zugriffsmethoden
(siehe Abschnitt 1.6.3).
❑ References>... Sucht nach Verweisen auf das selektierte Element
(siehe nächster Abschnitt).
❑ Definitions>... Sucht nach Definitionen des selektierten Elements
(siehe nächster Abschnitt).
❑ Read Access>... Sucht nach Lesezugriffen auf das selektierte Feld
(siehe nächster Abschnitt).
❑ Write Access>...
Sucht nach Schreibzugriffen auf das selektierte
Feld (siehe nächster Abschnitt).
❑ Add/Remove Watchpoint. Diese Funktion erscheint nur bei Feldern
und gehört zum Instrumentarium des Debuggers (siehe Kapitel 4).
❑ Add/Remove Method Breakpoint. Diese Funktion erscheint nur bei
Methoden und gehört zum Instrumentarium des Debuggers (siehe
Kapitel 4).
❑ Compare With>..., Replace With>..., Restore from Local History...
Mit diesen Funktionen kann die aktuelle Version mit früheren Versionen zu verglichen bzw. durch frühere Versionen ersetzt werden
(siehe Abschnitt 1.10).
2.6 Suchen
2.6
Suchen
2.6.1
Die Suchfunktion
Die Eclipse-Suchfunktion besteht aus zwei Komponenten: dem Dialogformular zur Eingabe der Suchkriterien (Abbildung 2.6) und der Tabelle der Suchergebnisse (Abbildung 2.7).
Abb. 2-6 Der Dialog für die Suchkriterien besitzt mehrere Seiten, abhängig von den
installierten Plug-ins. Hier haben wir eine Seite für die generelle Suche nach Dateien,
die einen Suchbegriff enthalten, eine Seite für die Suche nach Hilfebegriffen, eine
Seite für die Java-spezifische Suche (geöffnet) und eine Seite für die Suche nach
Plug-ins.
Suchkriterien
Wird die Suchfunktion von der Toolbar der Eclipse-Workbench oder
aus dem Eclipse-Hauptmenü heraus aufgerufen, so erscheint zunächst
der Dialog für die Spezifikation der Suchkriterien. Beim Aufruf über
eine Kontextfunktion unterbleibt dieser Schritt, da die Suchkriterien
schon feststehen.
Bei der Java-Suche kann als Suchbegriff der Name eines Typs, einer
Methode, eines Package, eines Konstruktors oder eines Felds eingegeben werden. Dabei lässt sich der Name ganz oder nur teilweise qualifizieren. Zusätzlich kann die Suche eingeschränkt werden. Man kann
nur nach Deklarationen oder nur nach Verweisen suchen bzw. nach
beiden. Bei Feldern kann die Suche auf Lese- oder Schreibzugriffe beschränkt werden. Der Suchbereich lässt sich auf selektierte Ressourcen
oder auf Working Sets (benannte Ressourcenmengen) beschränken.
59
60
2 Den Code richtig organisieren
Neben der Java-Suche gibt es im Suchdialog weitere Seiten für die
Suche nach Texten in allgemeinen Ressourcen, für die Suche im Hilfesystem und für die Suche nach Plug-ins. Mit der Customize-Taste kann
man einzelne Seiten des Suchdialogs aus- bzw. einblenden.
Suchergebnisse
Die Ergebnisse der Suche werden im Search-View dargestellt, der in der
Standard-Java-Perspektive den Tasks-View überdeckt.
Abb. 2-7 Der Search-View zeigt alle Kompiliereinheiten, in denen der Suchbegriff
gefunden wurde. Die Anzahl der Vorkommen wird hinter jedem Eintrag in Klammern
angegeben, wenn der Suchbegriff mehrfach in einer Einheit erscheint. Ein
Doppelklick auf einen Eintrag öffnet die entsprechende Kompiliereinheit im Editor.
Mit den Abwärts- und Aufwärts-Pfeilen in der Toolbar des SearchViews kann man bequem die einzelnen Fundstellen aufsuchen, die entsprechende Kompiliereinheit wird dabei automatisch im Editor geöffnet. In der linken Randzeile des Editors werden Zeilen mit Treffern der
Suchanfrage mit einem gelben Pfeil gekennzeichnet.
Der Search-View speichert auch vorhergehende Suchergebnisse.
Mit den entsprechenden Buttons (oder auch mit dem Menü des SearchViews) kann man deshalb auch auf die Ergebnisse früherer Suchanfragen zurückgreifen.
2.6.2
Finden und Ersetzen
Neben der oben diskutierten Suchfunktion gibt es natürlich auch eine
Editorfunktionen zum Suchen und Ersetzen von Zeichenketten. Mit
der Funktion Edit>Find/Replace erhält man einen Dialog (siehe Abbildung 2.8) zur Eingabe von Suchbegriffen und verschiedenen Suchoptionen. Ist beim Aufruf dieser Funktion bereits eine Zeichenkette selektiert, so wird diese Zeichenkette als Suchbegriff übernommen.
2.7 Editoren und Views anordnen
Abb. 2-8 Der Find/Replace-Dialog erlaubt es, Zeichenketten zu suchen und ggf.
durch andere Zeichenketten zu ersetzen.
Bei der Suche besteht die Möglichkeit, vorwärts oder rückwärts zu suchen und die Suche nur auf die selektierten Zeilen zu beschränken. Daneben gibt es noch einige weitere Optionen:
❑ Case Sensitive. Ist dieses Feld markiert, so wird die Groß- und
Kleinschreibung bei der Suche berücksichtigt.
❑ Wrap Search. Ist dieses Feld markiert, beginnt die Suche am Ende
des Suchbereichs (bzw. am Anfang wenn rückwärts gesucht wird)
wieder von vorne. Anderenfalls erfolgt eine Fehlermeldung.
❑ Whole Word. Ist dieses Feld markiert, werden nur ganze Wörter
gesucht.
❑ Incremental. Ist dieses Feld markiert, so beginnt die Suche sofort
bei der Eingabe des ersten Buchstabens. Bei Eingabe weiterer Buchstaben wird ggf. weitergesucht.
Entsprechend zu diesen Optionen stehen zusätzlich zu Edit>Find/Replace weitere spezialisierte Suchfunktion zur Verfügung: Edit>Find
Next, Edit>Find Previous, Edit>Incremental Find. Außerdem gibt es
noch die Funktion Edit>Go to line ..., mit der man durch Eingabe einer
Zeilennummer zur spezifizierten Zeile springen kann.
2.7
Editoren und Views anordnen
Die Anordnung der verschiedenen Fenster in der Eclipse-Workbench
ist nicht fest vorgegeben, sondern mit Einschränkungen frei konfigurierbar. Dabei gibt es im Wesentlichen drei verschiedene Organisationsprinzipien:
61
62
2 Den Code richtig organisieren
Fenster andocken
❑ Anordnung der Fenster neben- bzw. übereinander wie in Abbildung
2.9. Alle Fenster sind gleichzeitig sichtbar. Man kann ein Fenster an
ein anderes Fenster andocken, indem man es bei der Titelleiste oder
beim Reiter packt und an den jeweiligen Rand des Zielfensters
zieht. Erscheint ein Pfeilsymbol, lässt man es los.
Gestapelte Fenster
❑ Mehrere Fenster können in einem Stapel angeordnet werden.
Jeweils mit einem Druck auf einen Reiter kann ein Fenster im Stapel
nach oben gebracht werden und wird damit sichtbar. Man kann ein
Fenster auf andere Fenster stapeln, indem man es bei der Titelleiste
oder beim Reiter packt und auf das Zielfenster zieht. Erscheint ein
Stapelsymbol, lässt man es los.
FastView
❑ Im so genannten FastView kann ein Fenster auf die linke Randzeile
der Workbench (unter den Perspektiv-Ikonen) minimalisiert werden: Es wird nur noch als ein Ikon repräsentiert. Ein Klick auf das
Ikon und es wird erneut sichtbar, ein weiter Klick und es verschwindet wieder. Man kann ein Fenster in einen FastView verwandeln,
indem man es bei der Titelleiste oder beim Reiter packt und auf den
linken Rand der Workbench zieht. Erscheint ein Stapelsymbol, lässt
man es los.
Abb. 2-9 Hier haben wir den Search-View auf den rechten Rand des Tasks-View
gezogen. Nun erscheinen beide Views nebeneinander.
2.8 Perspektiven verwalten
Selbstverständlich kann man jedes Fenster durch einen Klick auf das
Kreuz in der rechten oberen Ecke des Fensters schließen. Doch wie öffnet man es wieder?
63
Fenster öffnen und
schließen
❑ Bei Editoren ist das einfach: Ein Doppelklick auf die entsprechende
Ressource im Navigator oder Package-Explorer öffnet die Ressource im jeweiligen Editor.
❑ Etwas komplizierter ist es bei Views. Hier benutzt man die Funk-
tion Window>Show View>... , in der man dann den zu öffnenden
View auswählt.
Alle Fenster der Workbench sind maximierbar. Ein Doppelklick auf
die Titelleiste eines Views bzw. den Reiter eines Editors maximiert das
betreffende Fenster, d.h., das Fenster nimmt allen Raum in der Workbench ein. Andere Fenster sind dann nicht mehr sichtbar. Ein weiterer
Doppelklick stellt den alten Zustand wieder her.
2.8
Perspektiven verwalten
Eine Perspektive ist eine bestimmte Konfiguration von Editoren, Views
und Menüs in der Workbench. In diesem Kapitel haben wir bereits die
Ressource-Perspektive und die Java-Perspektive kennen gelernt. In Kapitel 4 werden wir dazu noch die Debug-Perspektive kennen lernen.
2.8.1
Neue Perspektiven definieren
Nehmen wir an, Sie haben nun alle Fenster der Java-Perspektive entsprechend Ihren Vorlieben und Bedürfnissen angeordnet wie in
Abbildung 2.9. Gibt es eine Möglichkeit, diese Einstellungen zu speichern?
Ja, und zwar mit der Funktion Window>Save Perspective As... (Abbildung 2.10). Hier können Sie die aktuelle Konfiguration unter einem
von Ihnen vergebenen Namen als neue Perspektive speichern. Falls Sie
später zu dieser Konfiguration zurückkehren wollen, können Sie das
entweder mit der Funktion Window>Reset Perspective oder mit den
Funktionen Window>Close Perpective und Window>Open Perspective... erreichen.
Fenster maximieren
64
2 Den Code richtig organisieren
Abb. 2-10 Die in Abbildung 2.9 veränderte Workbench-Konfiguration speichern wir
hier als neue Perspektive unter dem Namen Java (Tasks neben Search) ab.
2.8.2
Perspektiven konfigurieren
Mit Hilfe der Funktion Window>Customize Perspective können bestimmte Aspekte der aktuellen Perspektive geändert werden.
Dazu gehören:
❑ Die Dateitypen, die im Untermenü File > New zur Verfügung ste-
hen.
❑ Die Perspektiven, die im Untermenü Window > Open Perspective
zur Verfügung stehen.
❑ Die Views, die im Untermenü Window > Show View zur Verfügung
stehen.
❑ Die Action Sets (Buttons und Menüfunktionen), die auf der Work-
bench-Toolbar bzw. im Workbench-Menü erscheinen (Abbildung
2.11).
2.9 Dateien importieren
Abb. 2-11 Mit der Funktion Window>Customize Perspective können ganze
Funktionsgruppen (Action Sets) aus einer Perspektive herausgenommen bzw. neue
Funktionsgruppen hineingenommen werden. Auf der rechten Seite ist aufgelistet,
welche Funktionen die selektierte Funktionsgruppe (hier Java Coding) umfasst.
Daneben gibt es unter Window>Preferences>Workbench>Perspectives
die Möglichkeit festzulegen, ob neu geöffnete Perspektiven innerhalb
der aktuellen Workbench oder in einem neuen Workbench-Fenster geöffnet werden. Diese letzte Option macht jedoch nur Sinn bei einem
sehr großen Bildschirm. Bei kleineren Bildschirmen wird man die
Eclipse-Workbench bildschirmfüllend einsetzen. Die Perspektive-Icons
auf der linken Randleiste der Workbench sind dann das geeignete Mittel für einen Perspektivwechsel.
Eine weitere Option erlaubt es, beim Neuanlegen eines Projektes
auch gleichzeitig eine neue Perspektive (im gleichen oder einem neuen
Workbench-Fenster) anzulegen. So könnte jedes Projekt eine eigens auf
es zugeschnittene Perspektive erhalten.
2.9
Dateien importieren
Wir gehen nun daran, unserem HelloWorld-Programm das Sprechen beizubringen. Seit Version 1.4 enthält Java auch eine Sprachschnittstelle,
das Java Speech API (JSAPI). Dazu gibt es die kostenlose Referenzimplementierung FreeTTS, die wir uns aus dem Internet herunterladen
können. FreeTTS hat seine Wurzeln im Sprachsynthesizer Flite, wurde
aber komplett nach Java portiert. Interessant dabei ist, dass FreeTTS
65
66
Fremdsoftware importieren
2 Den Code richtig organisieren
erheblich schneller abläuft als Flite. Java scheint also auch in Sachen
Geschwindigkeit C++ immer mehr Konkurrenz zu machen.
FreeTTS (Version 1.1.1) findet man unter http://sourceforge.net/
projects/freetts. Nach dem Download der etwa 26 MB großen Datei
(also ein Fliegengewicht im Vergleich zur Eclipse SDK Distribution)
entpackt man diese in ein beliebiges Verzeichnis. Außerdem muss noch
das JSAPI (Java Speech API) entpackt werden, da es einem anderen
Lizenzmodell unterliegt. Dazu führen wir einfach das Programm
jsapi.exe im Ordner FreeTTS\lib aus.
Man kann nun der FreeTTS-Installationsanleitung folgen und
FreeTTS ausprobieren. Das lassen wir aber bleiben und gehen daran,
das System direkt nach Eclipse zu importieren.
Zunächst legen wir uns ein neues Java-Projekt namens FreeTTS an.
Dieses Projekt halten wir selektiert und rufen mit der Kontextfunktion Import ... den Import-Wizard auf. Im folgenden Dialog sehen
wir eine Liste möglicher Importquellen. Dort wählen wir Filesystem
aus und drücken den Next-Button. Im nun erscheinenden Dialog
drücken wir den Browse-Button und navigieren bis zum Ordner
...\FreeTTS\demo\JSAPI\HelloWorld. Dieser Ordner erscheint nun im linken Fenster des Dialogs. Wir selektieren ihn und sehen auf der rechten Seite alle Dateien in diesem Ordner, wie in Abbildung 2.12 gezeigt. Dort machen wir ein Häkchen an HelloWorld.java und drücken
den Finish-Button.
Abb. 2-12 Importieren aus einem Dateisystem. Im Feld Directory enthält die Dropdown-Liste alle bisher verwendeten Import-Quellen, sodass man sich langwieriges
Suchen oft ersparen kann.
2.9 Dateien importieren
Wenn alles richtig gelaufen ist, müsste nun das importierte Programm
HelloWorld.java ein Default-Package im Projekt FreeTTS sein
(Abbildung 2.13). Doch, oh weh, jede Menge Fehlermeldungen!
Abb. 2-13 Nach dem Import. Die importierte Datei wurde sofort kompiliert, was zu
einer Menge offener Verweise führte.
Natürlich – das FreeTTS-Laufzeitsystem fehlt noch. Wir haben zwei
Möglichkeiten:
❑ Wir importieren auch die JAR-Dateien des Laufzeitsystems in den
Workspace. Damit koppeln wir uns aber von Versionswechseln ab.
Neue Versionen der JAR-Dateien müssten dann ggf. neu in den
Workspace importiert werden.
❑ Wir fügen die JAR-Dateien als externe Dateien dem Java Build Path
zu. Das erspart uns den Import dieser Dateien. So vermeiden wir
das doppelte Vorhalten dieser Archivdateien. Werden diese Dateien
durch neue Versionen ersetzt, werden die Änderungen auch sofort
für unser Projekt wirksam.
67
68
2 Den Code richtig organisieren
2.10
Der Java Build Path
Projekteigenschaften
Wir entscheiden uns bei diesem Beispiel für die zweite Möglichkeit.
Um JAR-Dateien dem Java Build Path hinzuzufügen, rufen wir die
Funktion Project>Properties und dann Java Build Path... auf und gehen zur Seite Libraries. Hier sehen wir nur einen einzigen Eintrag,
nämlich das Java-1.4-Laufzeitsystem rt.jar.
Wir drücken die Taste Add External Jars und navigieren zum
Ordner ...\FreeTTS\lib. Von den nun aufgelisteten JAR-Dateien
(cmuawb.jar, ..., JSAPI.jar) selektieren wir alle (demo.jar können wir
weglassen) und drücken dann den Öffnen-Button. Die so ausgewählten JAR-Dateien werden nun der Libraries-Liste hinzugefügt (Abbildung 2.14). Dann drücken wir noch den Ok-Button und harren der
Dinge, die da kommen. Alle Fehlermeldungen sind verschwunden!
Abb. 2-14 Die Libraries-Seite der Projekteigenschaften nach dem Einfügen der
FreeTTS-Jars.
Was uns noch fehlt, ist der Quellcode der FreeTTS-Binärdateien. Dieser Code ist im Archiv src.zip in der FreeTTS-Distribution enthalten.
Wir müssen diese Datei lediglich den entsprechenden Packages des
FreeTTS-Projektes zuordnen. Und das geschieht so:
2.11 Die Java Browsing-Perspektive
69
Für das Package freetts.jar wählen wir die Kontextfunktion Properties. In den dann erscheinenden Package-Eigenschaften wählen wir
Java Source Attachment. Dann drücken wir auf die Taste External File
und navigieren zur Datei src.zip. Und das war's auch schon. Öffnen
wir nun eine Datei aus freetts.jar, so erscheint der zugehörige Quellcode im Editor. Freilich sind diese Dateien nicht editierbar, sondern
dienen lediglich der Ansicht.
Eigentlich können wir das Programm nun ausprobieren. Wir führen es mit demselben Kommando wie schon unser erstes HelloWorldProgramm aus: Run>Run as>Java Application.
Statt der versprochenen Sprachausgabe erhalten wir aber nur folgenden Text auf der Konsole:
Can't find synthesizer.
Make sure that there is a "speech.properties" file at either of
these locations:
user.home
: H:\Dokumente und Einstellungen\Berthold Daum
java.home/lib: C:\j2sdk1.4.0\jre\lib
Richtig, davon war ja in der FreeTTS-Installationsanweisung die Rede.
Wir kopieren die Datei speech.properties aus ...\FreeTTS in eines der
genannten Verzeichnisse und führen dann unser Programm erneut aus.
Es ertönt:
Hello, World!
Vorausgesetzt freilich, Ihr Computer hat eine Soundkarte (oder Sound
on Board) und Sie haben einen Lautsprecher angeschlossen ...
2.11
Die Java Browsing-Perspektive
Die Java Browsing-Perspektive (Abbildung 2.15) erlaubt eine etwas
andere Sicht auf die Struktur eines Java-Projektes. Wir können diese
Perspektive einfach durch einen Druck auf die Taste »Neue Perspektive« (siehe Abschnitt 1.2) und entsprechende Auswahl anlegen.
Kein Bild, kein Ton ...
70
2 Den Code richtig organisieren
Abb. 2-15 Die Java Browsing-Perspektive erlaubt in den oberen vier Fenstern die
hierarchische Auswahl von Projekten, Packages, Typen und Methoden bzw. Feldern.
Da man leicht zwischen dieser Perspektive und der normalen Java-Perspektive hin
und her wechseln kann, ist diese Perspektive ein gutes Hilfsmittel, um den Überblick
über ein Projekt nicht zu verlieren.
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement