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");
}
}
}