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

zurück