Haus F, Zimmer F314, Telefon (040) 5494 2399
/opt/jdk1.1.4/
bin/
appletviewer -- Applets ausführen
java -- Java-Interpreter
javac -- Java-Compiler
javadoc -- API-Dokumentation
...
lib/
dynamische Link-Bibliotheken
src/ -- Quelltexte
java/
awt/...
io/...
lang/
Thread.java -- Quelltexte
net/...
include/ ... -- Header-Dateien für native-code
Bei Problemen mit dem Appletviewer oder Hotjava und der Meldung
java.lang.UnsatisfiedLinkError: no awt in shared library path
muß unter Solaris der Suchpfad für die Shared-Libraries
um /opt/dt/lib erweitert werden, etwa:
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/opt/dt/lib
Auf den Workstations des FBI Rechenzentrums funktioniert das JDK bestens,
wenn alle zusätzlichen Pfade aus der .cshrc bzw. .login
entfernt werden, da die systemweiten Dateien dann die korrekten Pfade
setzen.
Als Editor zur Erstellung der Quelltexte kann jeder beliebige Unix-Editor eingesetzt werden, zum Beispiel vi, emacs oder axe.
set path = ( /opt/jdk1.1.4/bin $path )
Anschließend können dann der Java-Compiler und der Interpreter bequem aus dem aktuellen Arbeitsverzeichnis heraus aufgerufen werden:
rzdspc31> cd rzdspc31> mkdir javakurs -- Verzeichnisse nach Wunsch rzdspc31> mkdir javakurs/HelloWorld rzdspc31> cd javakurs/HelloWorld rzdspc31> vi HelloWorld.java -- Editieren rzdspc31> javac HelloWorld.java -- Compilieren rzdspc31> java HelloWorld -- Ausführen Hello, World! rzdspc31>
Welche Eingabewerte führen noch zu gültigen Ergebnissen? Reagiert Ihr Algorithmus sinnvoll auf falsche Eingaben wie negative oder gebrochene Zahlen?
public class GGT {
public static void main( String argv[] ) {
int a, b, ggt;
a = Integer.parseInt( argv[0] );
b = Integer.parseInt( argv[1] );
...
... // hier der Algorithmus
System.out.println(
"Der GGT von " + a + " und " + b
+ " ist " + ggt );
}
}
Das Programm wird dann etwa so aufgerufen:
java GGT 555555 549746und sollte in diesem Fall den Wert 37 ausgeben. Den notwendigen Algorithmus (Euklids Algorithmus) finden Sie in fast allen Büchern über Algorithmen. Wie verhält sich Ihr Algorithmus beim Aufruf:
java GGT 1 2147483647oder für negative Argumente?
Implementieren Sie die Klassen. Wie lange dauert das Einfügen von 100.000 Elementen am Anfang, am Ende oder in der Mitte der Liste? Sie können die Systemzeit in Millisekunden mit der Funktion long System.currentTimeMillis() ermitteln.
Dokumentieren Sie Ihre Entscheidungen für die Wahl der internen Darstellung der Zahlen und die daraus folgenden Algorithmen.
Haben Sie DOC-Kommentare für Ihre Klasse BigInt verwendet? Erstellen Sie eine Klassendokumentation für BigInt mit dem javadoc-Programm.
Entwerfen Sie jetzt einige Unterklassen von Mitarbeiter wie Abteilungsleiter, Angestellter, Hausmeister, Manager usw.
Erzeugen Sie eine Anzahl von Exemplaren der verschiedenen Mitarbeiter und drucken Sie die Liste der Mitarbeiter aus. Verwenden Sie KEINE case()-Anweisungen oder if-then-else Konstrukte!
Verwenden Sie mindestens die Methoden drawLine(int,int,int,int), drawRect(int,int,int,int) und drawString(String,int,int).
Zum Beispiel könnten Sie versuchen, die in Aufgabe 2 integrierte Funktion f() mitsamt Koordinatensystem graphisch darzustellen. Nach einem Mausclick könnte dann zusätzlich die Annäherung des Integrals durch Rechtecke dargestellt werden.
Erstellen Sie eine HTML-Seite für das Applet und testen Sie es.
Sehen Sie Sich als Beispiele die Dateien Anfang.java und Laufschrift.java im Verzeichnis Grundlagen an, um das Grundgerüst für ein Applet zu bekommen.
Weitere Beispiele zu Applets finden sich hier oder im Unterverzeichnis demo ihrer Java-Installation, unter Solaris evtl. also unter /opt/jdk1.1.2/demo.
Blättern Sie durch die Klassendokumentation des java.awt Package, um einen Eindruck von den weiteren Klassen und Methoden zu bekommen.
Sie können dazu auf das Programm ImageDemo2 aus den Beispielprogrammen zurückgreifen (kap7).
Fragen Sie in der paint()-Methode die aktuelle Fenstergröß ab und skalieren Sie das Bild so, daß es optimal in das Fenster hineinpaßt. (Dabei bleibt evtl. oben/unten oder rechts/links ein Rand um das Bild).
Beobachten Sie das Verhalten Ihres Programms bei einer Änderung der Fenstergröße.
java Replace alterString neuerString eingabeDateiName java Replace alterString neuerString eingabeDateiName > ausgabeDateiNameVersuchen Sie, die Textersetzung mit Methoden der Klasse String zu erreichen. Verwenden Sie einen gepufferten FileInputStream und einen PrintStream.
Verwenden Sie die Klassen FileInputStream, BufferedInputStream, SequenceInputStream und die benötigten Ausgabeströme.
Anders als das Unix-Original soll Ihr Programm eine doppelt als Quelle und als Ziel angegebene Datei nicht zerstören, sondern korrekt mit den anderen Dateien verketten, zum Beispiel
java concat titel.txt buch.txt anhang.txt buch.txt
Falls die angegebene Datei nicht existiert, muß evtl. erst der zugehörige Pfad (Verzeichnisse und Unterverzeichnisse) erzeugt werden.
Versuchen Sie, ein Dialogfenster für eine 'Suchen und Ersetzen'-Funktion aufzubauen und menügesteuert aufzurufen.
Überlegen Sie sich, wie Sie die Dateinamen / Datenströme an die einzelnen Threads übergeben wollen, und wie die Threads ihr Ergebnis an das Hauptprogramm zurückliefern sollen.
Sie können dazu zum Beispiel das Programm RunnableDemo entsprechend erweitern.
Eine einfache Vorlage bietet das Programm Schach aus den Beispielprogrammen.
Was passiert, wenn Sie im Haupt-Thread einer Applikation
Thread.currentThread().stop()
aufrufen?
Arbeitet Ihr Programm korrekt?
Versuchen Sie dann, durch Einbau von synchronized-Blöcken, einen unter allen Scheduling-Varianten korrekten Programmablauf zu erreichen.