65 4 Projekte 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. 4.1 Die Workbench Wie schon in der Einführung erwähnt, ist das Java Development Toolkit (JDT) nur eines von vielen Plugins für die Eclipse-Workbench. Insofern ist die Eclipse-Workbench völlig unabhängig von Java. Schalten wir also einmal aus der Java-Perspektive zurück in die Ressourcen-Perspektive (Abb. 4–1). Dort, wo in der Java-Perspektive der PackageExplorer zu sehen war, sehen wir nun den Navigator. Die einzelnen Packages sind verschwunden, stattdessen sehen wir eine Struktur geschachtelter Verzeichnisse. Der Navigator 66 4 Projekte richtig organisieren Schnellzugriff für Ressourcen-Perspektive Navigator Abb. 4–1 Der Navigator zeigt Projekte, Verzeichnisse und Dateien. Wir haben hier schon etwas vorgegriffen: Das dargestellte Projekt wird erst in Kapitel 5 entwickelt. Beachten Sie, dass im Ressourcen-Navigator Binär- und Quelldateien getrennt dargestellt werden. 4.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. 4.2 Ressourcen 4.2.1 67 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. 4.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 AnimationEvent.java im Pfad \eclipse\workspace\DukeSpeaks\com\sun\speech\freetts\relp\AnimationEvent.java gespeichert. Freilich lässt sich das Workspace-Verzeichnis mit Hilfe des Kommandozeilenparameters -data auch an anderen Orten einrichten, so z.B. mit eclipse.exe -data C:\myOldWorkSpace oder durch Angabe eines anderen Workspace-Ortes im Workspace Launcher (siehe Abschnitt 1.1). 4.2.3 Ressourcen synchronisieren 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 Verzeichnis \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 Meta- Refresh 68 4 Projekte richtig organisieren daten 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. 4.2.4 Navigation Die folgenden Kontextfunktionen und Werkzeugtasten stehen im Kontextmenü und auf der Werkzeugleiste 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. ! Back. Diese Taste (Pfeil nach links) wechselt zur vorigen Sicht. ! Forward. Diese Taste (Pfeil nach rechts) macht Back wieder rückgängig. ! Up to. Diese Taste (Ordnersymbol) geht ins nächsthöhere Verzeichnis. ! Mit der Funktion Select Working Set ... kann ein benannter Working Set ausgewählt werden, um die im Navigator angezeigten Ressourcen auf die Ressourcen dieses Working Sets zu beschränken. Die Funktion gestattet auch die Neuanlage von Working Sets. ! Die Funktion Deselect Working Set entfernt diese Einschränkungen wieder. ! Mit der Funktion Edit Active Working Set ... kann der aktive Working Set modifiziert werden. ! 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-Funktion können die Dateien nach Name oder Typ sortiert angeordnet werden. ! Mit der Filters ...-Funktion können Dateien mit bestimmten Dateierweiterungen aus dem Navigator ausgeblendet werden. 4.3 Assoziationen 69 ! Die Funktion Link with Editor schaltet die automatische Synchronisation der Ressourcenselektion mit dem Editorinhalt ein. Wenn Sie durch einen Klick auf einen Reiter zu einem anderen Editor wechseln, ändert sich die Selektion im Navigator entsprechend. 4.3 Assoziationen Der Typ einer Datei wird aus der Dateierweiterung bestimmt. In Abbildung 4–1 sehen wir textbasierte Dateien wie die .java- und .html-Dateien, 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 Plugins bestimmt. Es ist jedoch auch möglich, manuell solche Assoziationen hinzuzufügen. Hierzu ruft man die Funktion Window>Preferences> Workbench>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 Abb. 4–2). Durch einen Doppelklick auf eines dieser Programme wählt man es als neuen Editor aus. Öffnen mit ... Neue Assoziation festlegen 70 4 Projekte richtig organisieren Abb. 4–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. 4.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. 4.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 4–3 gezeigt – alle Ressourcen des Package com.sun.speech.freetts.relp im relativen Pfad com/sun/speech/ freetts/relp gespeichert sein. In Eclipse ist diese Pfadangabe immer relativ zum Quelltext-Wurzelverzeichnis für das Projekt. Der relative Pfad com/sun/speech/freetts/relp entspricht daher dem physischen Pfad \eclipse\workspace\DukeSpeaks\com\sun\speech\freetts\relp. 4.4 Packages Abb. 4–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 mehreren 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. 4.4.2 Navigation Der Package-Explorer verfügt über ähnliche Navigationsfunktionen wie der Navigator (siehe Abschnitt 4.2.4). So gibt es auch hier die Kontextfunktionen Go into und Open in new Window, in der Toolbar gibt es Tasten für die Funktionen Back, Forward und Up to. Unter dem Drop-down-Menü der Werkzeugleiste finden wir auch die gleichen Funktionen zur Verwaltung von Working Sets und für die Synchronisierung mit dem Editor. Außerdem besteht noch die Möglichkeit, den Browser für die Typhierarchie zu öffnen. 4.4.3 Typhierarchie 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 (Abb. 4–4). 71 72 4 Projekte richtig organisieren Abb. 4–4 Der Hierarchie-Browser besteht aus zwei Fenstern. Im oberen Fenster wird die Typhierarchie 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 Projekts wird man ihn in der Regel erst bei fortgeschrittenem Projektstand benötigen. Eine schnelle Methode, die Typhierarchie zur Anzeige zu bringen, ist die Taste F4, die genau wie die Kontextfunktion Open Type Hierarchy wirkt. Alternativ gibt es noch die Tastenkombination Strg+T, mit der die Typhierarchie in einem Popup-Fenster zur Anzeige gebracht werden kann. 4.5 Der Outline-View 4.5 73 Der Outline-View Der Outline-View (Abb. 4–5) gestattet die Navigation innerhalb einer Quelldatei. Generell ist der Outline-View nicht auf Java-Programme beschränkt, sondern steht – je nach installierten Plugins – auch für andere Dateitypen zur Verfügung. 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. 4.5.1 Darstellung Abb. 4–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). 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). Icons 74 4 Projekte richtig organisieren import-Anweisung (importicon.tif) Interface (interfacedef.tif) Klasse (classdef.tif) öffentliche Methode (public) (publicmethod.tif) geschützte Methode (protected) (protectedmethod.tif) private Methode (private) (privatemethod.tif) Standardmethode (ohne Modifikation) (defaultmethod.tif) öffentliches Feld (public) (publicfield.tif) geschütztes Feld (protected) (protectedfield.tif) privates Feld (private) (privatefield.tif) Standardfeld (ohne Modifikation) (defaultfield.tif) Zusätzlich zu diesem ersten Icon können noch weitere Icons angezeigt werden: Konstruktor (constructor.tif) statisches Element (static) (static.tif) unveränderbares Element (final) (final.tif) überschriebenes Element (override.tif) Die Darstellung des Outline-View 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 überschreibende 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. 4.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 Abb. 4–5). Hier ist eine Übersicht über die vorhandenen Kontextfunktionen: 4.6 Suchen ! Open Type Hierarchy. Zeigt die Typhierarchie für das ausgewählte Element (siehe Abschnitt 4.4.3). Diese Funktion kann nicht nur auf einzelne Typen, sondern auch auf ganze Packages oder Projekte angewandt werden. ! Open Call Hierarchy. Zeigt die Aufrufhierarchie für die ausgewählte Methode. ! Open Super Implementation. Diese Funktion erscheint nur bei überschreibenden Elementen. Bei Ausführung der Funktion wird das überschriebene Element im Editor geöffnet. ! Cut, Copy, Paste, Delete. Die üblichen Kopier- und Löschfunktionen, angewandt auf das im Outline-View ausgewählte Element. ! Refactor>... Verschiedene Funktionen zum Umorganisieren von Code (siehe Abschnitt 2.3.2). ! Source>... Verschiedene Funktionen zur automatischen Vervollständigung von Code (siehe Abschnitt 2.1.3). ! References>... Sucht nach Verweisen auf das selektierte Element (siehe nächster Abschnitt). ! Declarations>... 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). ! Occurrences in File. Zeigt im Search View (siehe nächster Abschnitt), wo das ausgewählte Element in der aktuellen Datei vorkommt. ! Toggle Watchpoint. Diese Funktion erscheint nur bei Feldern und gehört zum Instrumentarium des Debuggers (siehe Kapitel 6). ! Toggle Method Breakpoint. Diese Funktion erscheint nur bei Methoden und gehört zum Instrumentarium des Debuggers (siehe Kapitel 6). ! 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 2.5). 4.6 Suchen Suchen und Finden sind in Eclipse zweierlei: Die Search-Funktion führt eine Suche im gesamten Workspace durch, während die Find-Funktion nach Zeichenketten im aktuellen Dokument sucht. 75 76 4 Projekte richtig organisieren 4.6.1 Die Suchfunktion Die Eclipse-Suchfunktion besteht aus zwei Komponenten: dem Dialogformular zur Eingabe der Suchkriterien (Abb. 4–6) und der Tabelle der Suchergebnisse (Abb. 4–7). 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. Abb. 4–6 Der Dialog für die Suchkriterien besitzt mehrere Seiten, abhängig von den installierten Plugins. 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 Plugins. 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 4.6 Suchen beschränkt werden. Der Suchbereich lässt sich auf selektierte Ressourcen oder auf Working Sets (benannte Ressourcenmengen) beschränken. Neben der Java-Suche gibt es im Suchdialog weitere Seiten für die Suche nach Texten in allgemeinen Ressourcen (in diesem Modus gibt es auch eine Replace ...-Taste, um Ersetzungsoperationen durchzuführen), für die Suche im Hilfesystem und für die Suche nach Plugins. Mit der Customize-Taste kann man einzelne Seiten des Suchdialogs ausbzw. einblenden. Suchergebnisse Die Ergebnisse der Suche werden im Search-View dargestellt, der in der Standard-Java-Perspektive den Tasks-View überdeckt. Wurde vorher im Menü des Views die Option Hierarchical Layout gewählt, können mit einem Druck auf die entsprechende Werkzeugtaste die Suchergebnisse nach Projekt, Package, Datei oder Klasse gruppiert werden. Selektierten Eintrag löschen Nach Ordner gruppieren Nächster Eintrag Alle Einträge löschen Nach Package gruppieren Alles expandieren Voriger Eintrag Nach Datei gruppieren Alles kollabieren Nach Typ gruppieren Suche stoppen Vorige Suchergebnisse Abb. 4–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 Search-Views) kann man deshalb auch auf die Ergebnisse früherer Suchanfragen zurückgreifen. 77 78 4 Projekte richtig organisieren 4.6.2 Finden und Ersetzen Neben der oben diskutierten Suchfunktion gibt es natürlich auch eine Editorfunktion zum Suchen und Ersetzen von Zeichenketten. Mit der Funktion Edit>Find/Replace erhält man einen Dialog (siehe Abb. 4–8) zur Eingabe von Suchbegriffen und verschiedenen Suchoptionen. Ist beim Aufruf dieser Funktion bereits eine Zeichenkette selektiert, so wird diese Zeichenkette als Suchbegriff übernommen. Abb. 4–8 Der Find/Replace-Dialog erlaubt es, Zeichenketten zu suchen und ggf. durch andere Zeichenketten zu ersetzen. Seit Eclipse 3 werden auch reguläre Ausdrücke sowohl beim Finden als auch beim Ersetzen unterstützt, wie hier gezeigt. 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. ! Regular Expression. Ist dieses Feld markiert, wird der Suchausdruck als regulärer Ausdruck interpretiert. Mit F1 bekommen Sie 4.7 Editoren und Views anordnen 79 Hilfe für die Syntax regulärer Ausdrücke, und mit Strg+Leertaste erhalten Sie einen Inhaltsassistenten, der Ihnen bei der Konstruktion eines regulären Ausdrucks hilft. Im Suchausdruck können Capture-Gruppen verwendet werden. Die Ergebnisse stehen im Ausdruck für die Ersetzung zur Verfügung. Entsprechend zu diesen Optionen stehen zusätzlich zu Edit>Find/Replace weitere spezialisierte Suchfunktionen zur Verfügung: Edit>Find Next, Edit>Find Previous, Edit>Incremental Find. 4.6.3 Gleichnamige Elemente markieren Wenn Sie unter Window>Preferences>Mark Occurrences die Option Mark occurrences in file einschalten, so werden in Zukunft, wenn Sie im Editor ein syntaktisches Element selektieren, auch alle gleichnamigen Elemente in der gleichen Datei markiert. Da diese Markierungen auch in der rechten Randleiste erscheinen, kann man diese Stellen leicht mit dem Scrollbalken aufsuchen und erspart sich in vielen Fällen eine umständliche Suche. Dabei können Sie in den Einstellungen noch festlegen, für welche Art von syntaktischen Elementen diese Funktion wirksam sein soll: für alle Typen, für Methoden, für Konstanten, Felder, Variablen usw. Wenn Sie zusätzlich noch die Option Sticky einschalten, so bleiben die Markierungen auch noch erhalten, wenn das betreffende Element nicht mehr markiert ist. Die Markierungsfunktion kann mit der Werkzeugtaste Mark Occurrences an- oder abgeschaltet werden. 4.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 vier verschiedene Organisationsprinzipien: ! Anordnung der Fenster neben- bzw. übereinander wie in Abbildung 4–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. ! 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 Fenster andocken Gestapelte Fenster 80 4 Projekte richtig organisieren Als Fenster FastView 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. ! Views können auch als eigenständige Fenster außerhalb des Workbench-Fensters auf dem Desktop angelegt werden. Das geht allerdings nur unter Windows und Linux GTK. Man packt das Fenster einfach beim Reiter and legt es auf dem Desktop ab. ! Im so genannten FastView kann ein View auf der FastView-Leiste der Workbench minimalisiert werden: Es wird nur noch als ein Icon repräsentiert. Ein Klick auf das Icon und es wird erneut sichtbar, ein weiterer Klick und es verschwindet wieder. Die FastViewLeiste ist allerdings erst sichtbar, wenn mindestens ein View als FastView angelegt wurde. Um das zu tun, klicken Sie mit der rechten Maustaste auf den Reiter des Views und wählen dann die Kontextfunktion FastView. Auch die FastView-Leiste verfügt über Abb. 4–9 Hier wurde der Search-View auf den rechten Rand des Problems-View gezogen. Nun erscheinen beide Views nebeneinander. 4.8 Perspektiven verwalten 81 Kontextfunktionen: Mit der Funktion Orientation kann festgelegt werden, ob ein FastView vertikal oder horizontal expandiert werden soll. Mit einem Klick auf die Funktion FastView kann das Häkchen von dieser entfernt werden und der View wieder in den Originalzustand zurückversetzt werden. Mit der Funktion Dock On kann festgelegt werden, wo die FastView-Leiste erscheinen soll: am unteren Rand des Workbench-Fensters (Standard) oder am linken oder rechten Rand. 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? 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 Funktion Window>Show View>..., in der man dann den zu öffnenden View auswählt. Alle Fenster der Workbench sind maximierbar. Ein Doppelklick auf den Reiter eines Views oder eines Editors bzw. ein Klick auf das Maximize-Icon 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 auf den Reiter oder ein Klick auf das Restore-Icon stellt den alten Zustand wieder her. Ein Klick auf das Minimize-Icon lässt einen View (und alle anderen Views, die im selben Bereich gestapelt sind) auf die reine Titelzeile zusammenschrumpfen. Mit einem Klick auf das Restore-Icon lässt sich der alte Zustand wiederherstellen. 4.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 6 werden wir dazu noch die Debug-Perspektive kennen lernen. 4.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 Fenster maximieren Views minimieren 82 4 Projekte richtig organisieren Abbildung 4–9. Gibt es eine Möglichkeit, diese Einstellungen zu speichern? Ja, und zwar mit der Funktion Window>Save Perspective As ... (Abb. 4–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 Perspective und Window>Open Perspective ... erreichen.Die in Abbildung 4–9 veränderte Workbench-Konfiguration speichern wir hier als neue Perspektive unter dem Namen Java (Search docked to Problems) ab. Abb. 4–10 Die in Abbildung 4–9 veränderte Workbench-Konfiguration speichern wir hier als neue Perspektive unter dem Namen Java (Search docked to Problems) ab. 4.8 Perspektiven verwalten 4.8.2 Perspektiven konfigurieren Mit Hilfe der Funktion Window>Customize Perspective können bestimmte Aspekte der aktuellen Perspektive geändert werden: ! Der Reiter Shortcuts erlaubt anzugeben, welche Elemente direkt in einem gegebenen Untermenü aufgelistet werden sollen (andernfalls müsste man auf Others ... klicken, um zu dem gewünschten Element zu kommen). Shortcuts können für die Untermenüs File>New, Window>Open Perspective und Window>Show View definiert werden. ! Der Reiter Commands erlaubt anzugeben, welche Kommandogruppen (Action Sets) im Menü und der Werkzeugleiste der aktuellen Perspektive sichtbar sein sollen. Diese Funktion kann übrigens auch bequem mit einem Klick der rechten Maustaste auf die Werkzeugleiste aufgerufen werden. Abb. 4–11 Mit der Funktion Window>Customize Perspective können ganze Kommandogruppen (Action Sets) aus einer Perspektive herausgenommen bzw. neue Kommandogruppen hineingenommen werden. Das mittlere und rechte Fenster zeigen an, wie sich die ausgewählte Kommandogruppe auf das Menü und die Werkzeugleiste auswirkt. 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 83 84 4 Projekte richtig organisieren sehr großen Bildschirm. Bei kleineren Bildschirmen wird man die Eclipse-Workbench bildschirmfüllend einsetzen. Die Perspektive-Icons auf der Perspektiven-Leiste der Workbench (rechts oben) sind dann das geeignete Mittel für einen Perspektivwechsel. Eine weitere Option erlaubt es, beim Neuanlegen eines Projekts 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. 4.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 Abb. 4–12 Importieren aus einem Dateisystem. Im Feld From Directory enthält die Drop-down-Liste alle bisher verwendeten Import-Quellen, so dass man sich langwieriges Suchen oft ersparen kann. 4.9 Dateien importieren FreeTTS erheblich schneller abläuft als Flite. Java scheint also auch in Sachen Geschwindigkeit C++ immer mehr Konkurrenz zu machen. FreeTTS (Version 1.2.0) findet man unter http://sourceforge.net/projects/freetts. Nach dem Download der Binär- und Quelldateien, die zusammen etwa 24 MB groß sind (also ein Fliegengewicht im Vergleich zur Eclipse SDK Distribution), entpackt man die Binärdateien 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. Dabei kreuzen wir die Option Create separate source and output folders an. In diesem Projekt selektieren wir den Ordner src 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 Abb. 4–13 Nach dem Import. Die importierte Datei wurde sofort kompiliert, was zu einer Menge offener Verweise führte. 85 Fremdsoftware importieren 86 4 Projekte richtig organisieren 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 4–12 gezeigt. Dort machen wir ein Häkchen an HelloWorld.java und drücken den Finish-Button. Wenn alles richtig gelaufen ist, müsste nun das importierte Programm HelloWorld.java ein Default-Package im Projekt FreeTTS sein (Abb. 4–13). Doch, oh weh, jede Menge Fehlermeldungen! 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. 4.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 (cmu_time_awb.jar, ..., jsapi.jar) selektieren wir alle und drücken dann den Öffnen-Button. Die so ausgewählten JAR-Dateien werden nun der Libraries-Liste hinzugefügt (Abb. 4–14). Dann drücken wir noch den Ok-Button und harren der Dinge, die da kommen. Alle Fehlermeldungen sind verschwunden! (Falls nicht, müssen Sie den BuildProzess für das Projekt mit der Kontextfunktion Build Project manuell ausführen.) Was uns noch fehlt, ist der Quellcode der FreeTTS-Binärdateien. Dieser Code ist im heruntergeladenen Archiv freetts-srcs1_2_beta.zip enthalten. Wir müssen diese Datei lediglich den entsprechenden Packages des FreeTTS-Projekts zuordnen. Und das geschieht so: 4.10 Projekteigenschaften 87 Abb. 4–14 Die Libraries-Seite der Projekteigenschaften nach dem Einfügen der FreeTTSJars. 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 freetts-srcs-1_2_beta.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. Kein Bild, kein Ton ... 88 4 Projekte richtig organisieren Es ertönt: Hello, World! Vorausgesetzt freilich, Ihr Computer hat eine Soundkarte (oder Sound on Board) und Sie haben einen Lautsprecher angeschlossen ... 4.11 Die Java Browsing-Perspektive Die Java Browsing-Perspektive (Abb. 4–15) erlaubt eine etwas andere Sicht auf die Struktur eines Java-Projekts und erinnert an VisualAgeZeiten. Wir können diese Perspektive einfach durch einen Druck auf die Taste »Neue Perspektive« (siehe Abschnitt 1.2) und entsprechende Auswahl anlegen. Abb. 4–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.
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
advertisement