Unterschiedliche Threads...Wie?

vaporizer

Erfahrenes Mitglied
Also erstmals Hallo an alle
Will zwei Methoden gleichzeitig aufrufen..
das funktioniert angeblich mit Threads..
Wie kann ich zwei unterschiedliche Threads laufen lassen..
habs mir Hilfe des Javabuches versucht..
aber leider ohne Erfolg...
kann mir jemand mit hilfe eines kurzen Code zeigen wie man das macht..
danke
Schöne Grüße von Vaporizer
 
Moin!

Code:
/**
 * @author      Darimont<br>
 * @version     1.0<br>
 * Date of creation:  08.03.2004<br>
 * File:         ThreadExample.java<br>
 * Modifier:     Darimont<br>
 * Revision:     Revision<br>
 * State:        Germany<br>
 */

public class ThreadExample {

	public ThreadExample() {
		Thread t1 = new Thread(new Ablauf1());
		t1.setName("T1");
		
		Thread t2 = new Thread(new Ablauf2());
		t2.setName("T2");

		t1.start();
		t2.start();

	}

	public static void main(String[] args) {
		new ThreadExample();

	}
	class Ablauf1 implements Runnable {

		/* (non-Javadoc)
		 * @see java.lang.Runnable#run()
		 */
		public void run() {
			// TODO Auto-generated method stub
			for (int i = 0; i < 1000; i++) {
				System.out.println(
					Thread.currentThread().getName() + " sagt : " + i);
				try {
					Thread.sleep(500);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}

	}

	class Ablauf2 implements Runnable {

		/* (non-Javadoc)
		 * @see java.lang.Runnable#run()
		 */
		public void run() {
			// TODO Auto-generated method stub
			for (int i = 0; i < 1000; i++) {
				System.out.println(
					Thread.currentThread().getName() + " sagt : " + i);
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}

	}
}

Gruß Tom
 
ähm...
also folgendes...
verstehe das mit den Threads nun so ein klein wenig...
kann es aber nicht in mein Programm einfügen...
Bsp.:
public class Problem
{
int x=1;
public void run()
{
while(x == 1)
{
doAnything()
}
}
}
sooo die Schleife läuft nun ewig dahin
Wie stoppe ich sie wieder..
kann mir bitte jemand dieses Beispiel in ein Thread Beispiel verwandeln
bei dem man eine Methode hat die x zB auf 2 setzt..
damit die Schleife aufhört zu laufen..
DANKE
 
Hey!

Code:
public class Problem extends Thread{
	private boolean running;

	public void run() {
		while (running) {
			doAnything();
			}
	}
	public void startProblem(){
		running = true;
		start();
	}

	public void stopProblem(){
		running = false;
	}
	public void doAnything(){
		
	}
}

//oder anders, mit dem Interface Runnable:

public class Problem implements Runnable{
	[snip]
	public void startProblem(){
		running = true;
		new Thread(this).start();
	}
}

Sowas steht aber auch in sämtlichen Java Tutorials. Hab einfach den Mut dir die Sachen anzusehen.

Gruss TrueSun
 
sooo letzter Versuch *verzweifel*
Bitte wär jemand so nett..
und würde mir jemand dieses Prog lauffähig machen
also soo das die Methode stopClock funktioniert mittels Thread
und ich die schleife stoppen kann
wäre echt sehr nett
vermutlich geh ich euch damit auf die nerven..aber ich brings einfach nicht zusammen
Danke für euer verständnis und eurer Hilfe

import java.util.Calendar;

public class Clock2 extends Thread

{
private Canvas show;
private NumberCounter hours;
private NumberCounter minutes;
private NumberCounter seconds;
private boolean ampm;
private String time;
private boolean running;

public static void main(String[] args)
{
Clock2 clock = new Clock2();
clock.SysTime();
clock.showClock();
}
public Clock2()
{
hours = new NumberCounter(13);
minutes = new NumberCounter(60);
seconds = new NumberCounter(60);
upDate();
}
public Clock2(int h, int m, int s, String amorpm)
{
hours = new NumberCounter(13);
minutes = new NumberCounter(60);
seconds = new NumberCounter(60);
hours.setTime(h);
minutes.setTime(m);
seconds.setTime(s);
if((amorpm.equals("am")) || (amorpm.equals("pm")))
{
if(amorpm.equals("am"))
ampm = false;
if(amorpm.equals("pm"))
ampm = true;
}
else
System.out.println("Geben sie bitte am oder pm ein");
upDate();
}
public void tickSec()
{
seconds.count();
if(seconds.getV() == 0)
{
minutes.count();
if(minutes.getV() == 0)
tickHour();
}
upDate();
}
public void tickMin()
{
minutes.count();
if(minutes.getV() == 0)
tickHour();
upDate();
}
public void tickHour()
{
hours.count();
if(hours.getV() == 0)
{
hours.setTime(1);
if(ampm == true)
ampm = false;
else
ampm = true;
}
upDate();
}
public String getTime()
{
return time;
}
private void setAP(String ap)
{
if(ap.equals("am"))
ampm = false;
if(ap.equals("pm"))
ampm = true;
upDate();
}
private String getAP()
{
if(ampm == false)
return "am";
else
return "pm";
}
private void upDate()
{
time = hours.getValue() +":"+ minutes.getValue()
+":"+ seconds.getValue() +" "+ getAP();
}
public void SysTime()
{
Calendar cal = Calendar.getInstance();
hours.setTime(cal.get(Calendar.HOUR_OF_DAY));
minutes.setTime(cal.get(Calendar.MINUTE));
seconds.setTime(cal.get(Calendar.SECOND));
}

public void showClock()
{
show = new Canvas("ClockShow",100,30);
show.setVisible(true);
running = true;
while(running)
{
show.drawString(time,20,20);
try
{
Thread.sleep(1000);
}
catch (Exception e)
{
}
tickSec();
show.erase();
}
}
public void stopClock()
{
running = false;
}
}
Der jenige der die Uhr zum stehn bringt bekommt 100 Punkte ;-)
 
Hallo!

Wäre sehr hilfreich auch noch die Klasse NumberCounter und die Klasse die die main Methde enthält zu bekommen ...

Gruß Tom
 
Hier ist Sie:
Main ist eh oben in der Clock2 class gleich nach den eigenschaften

public class NumberCounter
{
private int value;
private int limit;

public NumberCounter(int limit)
{
this.limit=limit;
value=0;
}
public int getV()
{
return value;
}
public String getValue()
{
if(value <= 9)
{
return "0" + value;
}
else
{
return "" + value;
}
}
public void setTime(int newV)
{
if((newV >= 0) && (newV < limit))
value = newV;
}
public void count()
{
value = (value+1) % limit;
}

}
 
Hallo!

"Leicht" modifizierte Version ... ;-)

Code:
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;

import javax.swing.JFrame;

public class Clock2 extends JFrame implements Runnable {

	private NumberCounter hours;
	private NumberCounter minutes;
	private NumberCounter seconds;
	private boolean ampm;
	private String time;
	private boolean running;
	private Graphics g;

	public static void main(String[] args) {
		Clock2 clock = new Clock2();
		clock.SysTime();
		clock.showClock();
	}

	public Clock2() {
		super("ClockShow");

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent evt) {
				stopClock();
				setVisible(false);
				dispose();
				System.exit(0);
			}
		});
		setSize(320, 240);
		setVisible(true);
		g = this.getContentPane().getGraphics();
		hours = new NumberCounter(13);
		minutes = new NumberCounter(60);
		seconds = new NumberCounter(60);
		upDate();

	}
	public Clock2(int h, int m, int s, String amorpm) {
		hours = new NumberCounter(13);
		minutes = new NumberCounter(60);
		seconds = new NumberCounter(60);
		hours.setTime(h);
		minutes.setTime(m);
		seconds.setTime(s);
		if ((amorpm.equals("am")) || (amorpm.equals("pm"))) {
			if (amorpm.equals("am"))
				ampm = false;
			if (amorpm.equals("pm"))
				ampm = true;
		} else
			System.out.println("Geben sie bitte am oder pm ein");
		upDate();
	}
	public void tickSec() {
		seconds.count();
		if (seconds.getV() == 0) {
			minutes.count();
			if (minutes.getV() == 0)
				tickHour();
		}
		upDate();
	}
	public void tickMin() {
		minutes.count();
		if (minutes.getV() == 0)
			tickHour();
		upDate();
	}
	public void tickHour() {
		hours.count();
		if (hours.getV() == 0) {
			hours.setTime(1);
			if (ampm == true)
				ampm = false;
			else
				ampm = true;
		}
		upDate();
	}
	public String getTime() {
		return time;
	}
	private void setAP(String ap) {
		if (ap.equals("am"))
			ampm = false;
		if (ap.equals("pm"))
			ampm = true;
		upDate();
	}
	private String getAP() {
		if (ampm == false)
			return "am";
		else
			return "pm";
	}
	private void upDate() {
		time =
			hours.getValue()
				+ ":"
				+ minutes.getValue()
				+ ":"
				+ seconds.getValue()
				+ " "
				+ getAP();
	}
	public void SysTime() {
		Calendar cal = Calendar.getInstance();
		hours.setTime(cal.get(Calendar.HOUR_OF_DAY));
		minutes.setTime(cal.get(Calendar.MINUTE));
		seconds.setTime(cal.get(Calendar.SECOND));
	}

	public void showClock() {
		Thread t = new Thread(this);
		t.setPriority(Thread.MIN_PRIORITY);
		running = true;
		t.start();

	}
	public void stopClock() {
		running = false;
	}
	/* (non-Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	public void run() {
		// TODO Auto-generated method stub
		while (running) {
			g.clearRect(0,0,320,240);
			g.drawString(time, 100, 30);
			System.out.println(time);
			try {
				Thread.sleep(1000);
			} catch (Exception e) {
				e.printStackTrace();
			}
			tickSec();

		}
	}
}

Gruß Tom
 
Zuletzt bearbeitet:
Vielen Dank Thomas
endlich kann ich meine Uhr stoppen..
man glaubt garnicht wie glücklich einem solche kleinen Dinge machen :)
aber ich hab noch eine Frage
kannst du mir sagen was es mit diesem Code auf sich hat
------
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt)
------
und was ist mit der Run() Methode
die wird nirgenswo aufgerufen...
wird sie automatisch aufgerufen?

Schöne Grüße von Vaporizer
 

Neue Beiträge

Zurück