Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing.Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4 IV. Threads, Audiodateien, Bilder, Datumsfunktion, Aufruf weiterer HTML-Seiten, Dateiarbeit und Weitergabe von Programmen Threads Benutzt ein Applet mehrere Prozesse, die zur gleichen Zeit ablaufen sollen, muss das Betriebssystem multiprozessorfähig sein. Bei einem Einprozessorsystem (Windows) werden alle Prozesse stückchenweise reihum verarbeitet. Das muss organisiert werden. Beispiel: ständige Zeitanzeige Die Zeitanzeige ist in einer Endlosschleife programmiert. Die CPU kann auf nichts anderes mehr reagieren und somit sind auch keine Ereignisse mehr auswertbar. Also muss das Programm in Threads (Prozesse) eingeteilt werden, um den Programmablauf kurzzeitig zu unterbrechen, um reagieren zu könnnen, d.h. Ereignisse werden in der kurzen Pause wieder wahr genommen. Ein Thread wird erzeugt mit der start-Methode, zerstört mit der stop-Methode. Die Arbeit beginnt in der Methode run. Run wird von start aufgerufen. In run steckt der eigentliche Programmcode des Threads. Notwendige Änderungen im Programm: - Signatur des Applets um implements Runnable; das ist die Schnittstelle für das verhalten eines Threads z.B. public class zeit extends Applet implements Runnable - Instanzvariable für den Thread deklarieren z.B. Thread runner; - Start- Methode aufnehmen z.B.: public void start() { if (runner==null) { runner=new Thread(this); runner.start(); } //Ende if ___________________________ Arbeitsblätter zur Vorlesung OOP Java; Teil 4 Seite: 1 } //Ende start - Stop- Methode aufnehmen z.B.: public void stop() { if (runner!=null) { runner.stop(); runner=null; } //Ende if } //Ende stop - Run- Methode aufnehmen z.B.: public void run() { while (true) { ... Hier steckt der gesamte Algorithmus für den Thread. ... } //Ende While } //Ende run Weitere Aktionen mit dem Thread sind möglich: Die Methode suspend() hält den Thread an, aber vernichtet ihn nicht. So kann eine Bewegung angehalten werden. z.B. : runner.suspend(); Die Methode resume() hebt die Suspendierung auf. z.B.: runner.resume(); Dar Hauptthread kann eingeschläfert werden und damit im Programm eine Pause erzeugt werden. Hier muss eine Exception in einem try-catch -Block abgefangen werden: z.B.: try {Thread.sleep(1000);} catch (InterruptedException e) {} ... hier schläft der Thread (das Hauptprogramm ) eine Sekunde lang. Einbinden von Audiodateien play(getCodeBase(), "Audiodatei.au"); // Es werden nur Audiodateien im au-Format gelesen. ___________________________ Arbeitsblätter zur Vorlesung OOP Java; Teil 4 Seite: 2 Einbinden von Bildern Deklarieren des Bildes: Image Bild; Bild zuweisen: Bild=getImage(getCodeBase(),bild.gif); Bild darstellen in der Paint-Methode: g.drawImage(Bild,xpos,ypos,this); Datums-und Zeitfunktion Zusätzliche Bibliothek einbinden: import java.util.Date; import java.util.*; den Kalender und die Zeitkomponemten deklarieren: GregorianCalendar cal; int stunde, minute, sekunde; den Kalender initialisieren und die Komponenten zuweisen: cal=new GregorianCalendar(); stunde=cal.get(Calendar.HOUR_OF_DAY); minute=cal.get(Calendar.MINUTE); sekunde=cal.get (Calendar.SECOND); Die Zeit ausgeben: g.drawString(String.valueOf(stunde)+':'+String.valueOf(minute)+':'+ String.valueOf(sekunde),10,50); Das alles läuft natürlich in einem Thread, damit man das Programm auch wieder beenden kann. Aufruf weiterer HTML-Seiten aus einem Applet zusätzliche Bibliotheken einbinden: import java.net.*; den Appletcontext deklarieren: AppletContext AC; Appletkontext anlegen in der init-Methode: AC=getAppletContext(); Aufruf der neuen URL (Exception im try-catch-Block abfangen): ___________________________ Arbeitsblätter zur Vorlesung OOP Java; Teil 4 Seite: 3 try { AC.showDocument(new URL("http://www.mb.fh-stralsund.de")); } catch(MalformedURLException x){showStatus(x.toString());} Dateiarbeit mit einfachen Textdateien Einbinden zusätzlicher Bibliotheken: Import java.io.*; Import java.util.*; Dateivariable deklarieren: BufferedReader f; // liest Zeichen von Datei (keine Bytes) BufferedWriter w; // schreibt Zeichen auf Datei Datei zuweisen und öffnen: f=new BufferedReader(new FileReader("lesen.txt")); w=new Bufferedwriter(new FileWriter("schreiben.txt")); Zeile lesen bzw. schreiben: Line=f.readline(); Line von Typ String vereinbaren ! Die Zeile wird auf einen String gelesen Readline verursacht eine IOException und muss demzufolge in einem try-catch-Block abgefangen werden. w.write (Parameterliste zum Schreiben angeben); Lesen bis zum Dateiende: If ((Line=f.readLine())!=null) {Hier erfolgt das Auslesen der Datensätze} Stehen mehrere Feldelemente in einem Datensatz muss man das Trennzeichen vereinbaren : StringTokenizer st=new StringTokenizer(Line,","); // hier ist das (,) das Trennzeichen und dann die einzelnen Werte einlesen: textField1.setText(st.nextToken()); textField2.setText(st.nextToken()); Datei schließen nicht vergessen: f.close(); w.close(); Weitergabe von Java-Programmen und Applets an die Browser Der Jbuilder bindet eigene Borland -Bibliotheken in ein Programm mit ein. Diese müssen an die Browser mit übergeben werden. Dafür gibt es im Jbuilder den Weitergabeexperten. Menü Experten Weitergabeexperte Das Dialogfeld stellt man wie folgt ein: ___________________________ Arbeitsblätter zur Vorlesung OOP Java; Teil 4 Seite: 4 Achten Sie dabei auf das richtige Verzeichnis. Am besten ist es, wenn Sie ein Unterverzeichnis im Projektverzeichnis anlegen. Hier im Beispiel heißt das Verzeichnis weiter ___________________________ Arbeitsblätter zur Vorlesung OOP Java; Teil 4 Seite: 5