Kompletter Quelltext
// Multithreading Demo // Für das Projektstudium im SS1997 an der FH-Wedel // von Timo Gronwald import java.applet.Applet; import java.awt.*; // Entscheidet ob es als Application oder Applet laufen soll public class multi extends Applet { Akt_Main Thread_stop; CPanel PanelThread_stop; // Application start public static void main(String args[]) { Frame Fenster = new Frame("5 Threads : Thread 1 Laufschrift, Thread 2-5 : math. Berechnungen"); Fenster.add("Center",new CPanel("")); Fenster.resize(500,200); Fenster.show(); } // Applet start public void init() { resize(500,200); setLayout(new BorderLayout()); add("Center",new CPanel("")); } //Applet stop public void stop() { //(Thread_stop.Threadstop(); //PanelThread_stop.stop(); } }
import java.applet.Applet; import java.awt.*; // Komponenten auf das Panel plazieren // Thread class starten // und ein Thread mit der Schablone Runnable implementieren public class CPanel extends Panel implements Runnable { // globale Varibalen Definition // inkl. Komponenten public TextField Ausgabefeld1; public TextField Ausgabefeld2; public TextField Ausgabefeld3; public TextField Ausgabefeld4; public TextField Eingabefeld1; public TextField Eingabefeld2; public TextField Laufschrift; public Panel RestPanel; public Panel LaufschriftPanel; String Eingabe; String Laufschrift_Text = "Multithreading Demo fuer das Projektstudium SS1997 an der FH-Wedel von Timo Gronwald......."; int x = 0; Thread t; // "HauptThread" // Laufschrift Thread, wird im Moment alle 100ms ausgefuehrt public void run() { String Auswahl_Text; while (true) { try { t.sleep(100); } catch(InterruptedException e) { } x++; if (x == Laufschrift_Text.length()) x = 0; Auswahl_Text = Laufschrift_Text.substring(0,x); Laufschrift.setText(Auswahl_Text); } } // Thread stop bei Appletende public void stop() { t.stop(); } // Auf Knopfdruck Programm beenden public boolean action(Event evt, Object what) { if("Ende".equals(what)) { System.exit(1); } return true; } public CPanel(String text) { // Thread Laufschrift starten if (t==null) { t = new Thread(this); t.start(); } // Komponenten definieren Ausgabefeld1 = new TextField(10); Ausgabefeld2 = new TextField(10); Ausgabefeld3 = new TextField(10); Ausgabefeld4 = new TextField(10); Eingabefeld1 = new TextField(10); Eingabefeld2 = new TextField(10); Laufschrift = new TextField(40); // Layout-Manager definieren setLayout(new BorderLayout()); // Zwei Unterpanels definieren und Layout-Manager dafuer definieren LaufschriftPanel = new Panel(); RestPanel = new Panel(); LaufschriftPanel.setLayout(new BorderLayout()); RestPanel.setLayout(new GridLayout(4,4)); // Komponenten plazieren RestPanel.add(new Label("WERT 1 :")); RestPanel.add(Eingabefeld1); RestPanel.add(new Label("WERT 2 :")); RestPanel.add(Eingabefeld2); RestPanel.add(new Label("Wert1+Wert2 (1 Sek.)")); RestPanel.add(new Label("Wert1-Wert2 (2 Sek.)")); RestPanel.add(new Label("Wert1*Wert2 (3 Sek.)")); RestPanel.add(new Label("Wert1/Wert2 (4 Sek.)")); RestPanel.add(Ausgabefeld1); RestPanel.add(Ausgabefeld2); RestPanel.add(Ausgabefeld3); RestPanel.add(Ausgabefeld4); RestPanel.add(new Button("Ende")); LaufschriftPanel.add("South",Laufschrift); add("North",RestPanel); add("South",LaufschriftPanel); // Standardeigenschaften von Komponenten setzen Ausgabefeld1.setEditable(false); Ausgabefeld2.setEditable(false); Ausgabefeld3.setEditable(false); Ausgabefeld4.setEditable(false); Eingabefeld1.setEditable(true); Eingabefeld2.setEditable(true); // Thread Klasse starten // (die Klasse, von der die Threads abgeleitet sind) Akt_Main MyThread; MyThread = new Akt_Main(Eingabefeld1, Eingabefeld2, Ausgabefeld1, Ausgabefeld2, Ausgabefeld3, Ausgabefeld4); } }
import java.applet.Applet; import java.awt.*; // Thread-Klasse public class Akt_Main extends Thread { public int a,b; public boolean ok = false; Akt1 Thread1; Akt2 Thread2; Akt3 Thread3; Akt4 Thread4; // Bei Appletende Thread stoppen public void Threadstop() { Thread1.stop(); Thread2.stop(); Thread3.stop(); Thread4.stop(); } // 4 Threads im Konstruktor starten public Akt_Main (TextField Eingabefeld1, TextField Eingabefeld2, TextField Ausgabefeld1, TextField Ausgabefeld2, TextField Ausgabefeld3, TextField Ausgabefeld4) { Thread1 = new Akt1(Eingabefeld1,Eingabefeld2,Ausgabefeld1); Thread1.start(); Thread2 = new Akt2(Eingabefeld1,Eingabefeld2,Ausgabefeld2); Thread2.start(); Thread3 = new Akt3(Eingabefeld1,Eingabefeld2,Ausgabefeld3); Thread3.start(); Thread4 = new Akt4(Eingabefeld1,Eingabefeld2,Ausgabefeld4); Thread4.start(); } // Konstruktor fuer Thread Klassen public Akt_Main () { } // Berechnungscode, Farbwechsel, Exceptions abfangen usw. // (enthaelt allen doppelten Code) public void berechnen(TextField Eingabefeld1, TextField Eingabefeld2, TextField Anzeige) { if (Anzeige.getBackground() == Color.blue) { Anzeige.setBackground(Color.white); Anzeige.setForeground(Color.black); } else { Anzeige.setBackground(Color.blue); Anzeige.setForeground(Color.white); } ok = true; try { a = Integer.parseInt(Eingabefeld1.getText()); } catch (NumberFormatException e2) { ok = false; } try { b = Integer.valueOf(Eingabefeld2.getText()).intValue(); } catch (NumberFormatException e2) { ok = false; } } }
import java.applet.Applet; import java.awt.*; // Thread 1 : a+b public class Akt1 extends Akt_Main { TextField Eingabefeld1_t1, Eingabefeld2_t1, Ausgabefeld1_t1; public Akt1(TextField Eingabefeld1, TextField Eingabefeld2, TextField Ausgabefeld) { Eingabefeld1_t1 = Eingabefeld1; Eingabefeld2_t1 = Eingabefeld2; Ausgabefeld1_t1 = Ausgabefeld; } public void run() { while (true) { try { sleep(1000); } catch(InterruptedException e) { } berechnen(Eingabefeld1_t1,Eingabefeld2_t1,Ausgabefeld1_t1); if (ok) Ausgabefeld1_t1.setText(Integer.toString(a + b)); else Ausgabefeld1_t1.setText("Fehler"); } } }
import java.applet.Applet; import java.awt.*; // Thread 2 : a-b public class Akt2 extends Akt_Main { TextField Eingabefeld1_t1, Eingabefeld2_t1, Ausgabefeld1_t1; public Akt2(TextField Eingabefeld1, TextField Eingabefeld2, TextField Ausgabefeld) { Eingabefeld1_t1 = Eingabefeld1; Eingabefeld2_t1 = Eingabefeld2; Ausgabefeld1_t1 = Ausgabefeld; } public void run() { while (true) { try { sleep(2000); } catch(InterruptedException e) { } berechnen(Eingabefeld1_t1,Eingabefeld2_t1,Ausgabefeld1_t1); if (ok) Ausgabefeld1_t1.setText(Integer.toString(a - b)); else Ausgabefeld1_t1.setText("Fehler"); } } }
import java.applet.Applet; import java.awt.*; // Thread 3 : a*b public class Akt3 extends Akt_Main { TextField Eingabefeld1_t1, Eingabefeld2_t1, Ausgabefeld1_t1; public Akt3(TextField Eingabefeld1, TextField Eingabefeld2, TextField Ausgabefeld) { Eingabefeld1_t1 = Eingabefeld1; Eingabefeld2_t1 = Eingabefeld2; Ausgabefeld1_t1 = Ausgabefeld; } public void run() { while (true) { try { sleep(3000); } catch(InterruptedException e) { } berechnen(Eingabefeld1_t1,Eingabefeld2_t1,Ausgabefeld1_t1); if (ok) Ausgabefeld1_t1.setText(Integer.toString(a * b)); else Ausgabefeld1_t1.setText("Fehler"); } } }
import java.applet.Applet; import java.awt.*; // Thread 4 : a/b public class Akt4 extends Akt_Main { TextField Eingabefeld1_t1, Eingabefeld2_t1, Ausgabefeld1_t1; public Akt4(TextField Eingabefeld1, TextField Eingabefeld2, TextField Ausgabefeld) { Eingabefeld1_t1 = Eingabefeld1; Eingabefeld2_t1 = Eingabefeld2; Ausgabefeld1_t1 = Ausgabefeld; } public void run() { while (true) { try { sleep(4000); } catch(InterruptedException e) { } berechnen(Eingabefeld1_t1,Eingabefeld2_t1,Ausgabefeld1_t1); if (ok) Ausgabefeld1_t1.setText(Integer.toString(a / b)); else Ausgabefeld1_t1.setText("Fehler"); } } }