Eigenes Event beim TimeOut

DodoJava

Mitglied
Guten Morgen,

ich muss gerade ein JavaApplet programmieren und komme auch relativ gut zurecht (langjährige Erfahrung in VB und PHP).

Nun stehe ich jedoch vor einem Problem und vielleicht gehe ich das auch vollkommen falsch an (weil ich es in VB so realisieren würde).

Ich habe mir aus dem Netz ein Code für ein Timer rausgesucht und ihn für meine Bedürfnisse angepasst.
Nun brauche ich jedoch irgendwie ein eigenes Event (oder irgendwas anderes) welches bei einem TimeOut des Timers eine Methode in meinem Hauptcode ausführt.

Timercode:
Java:
public class Timer implements Runnable {
	private Thread clock;
	private Boolean bRunning = false;
	public int Interval = 1000;
	
	public void destroy() {
		bRunning = false;
		clock = null;
	}
	
	public void init(){    
		if(clock == null) {
			clock = new Thread(this);
			clock.start();
		}
	}

	public void run() {
		while(bRunning) {
			try {
				clock.sleep(Interval);
				// <-- Raise Event
			} catch(InterruptedException e) {
	        	 
			}
		}
	}
	
	public void start() {
		bRunning = true;
		run();
	}
	
	public void stop() {
		bRunning = false;
	}
}

Meinem Hauptcode sieht abgespeckt nun so aus

Java:
public class HeMeter extends Applet implements ActionListener{
	private Timer tmeTimer;

	public void init() {
		tmeTimer.Interval = 2000; // 2 sek
		tmeTimer.start();
	}

	// Diese Methode soll ausgeführt werden bei einem Timeout
	public void tmeTimer_Timeout() {
		// hier kommt Code
	}
}

Ich würde mich sehr über hilfreiche Antworten freuen, auch wenn meine Denkweise falsch ist bitte ich um berichtigung.
Ziel ist im Prinzip einfach das alle 2 Sekunden ein Code ausgeführt wird (ohne das die GUI hängt, deswegen auch ein Thread)

Vielen Dank
gruß Dodo
 
Du musst dem Timer einfach eine Referenz mitgeben, über welche die bestimmte Methode aufgerufen werden kann.
Am besten & allgemeinsten löst man das über ein Interface, welches eine bestimmte Methode hat, welche aufgerufen werden soll.

Die sauberste Lösung wäre es, ein eigenes Interface zu erstellen, welches deine
Code:
HeMeter
-Klasse implementiert.

Oder Quick & Dirty mit
Code:
Runnable
:
Java:
public class Timer

[...]

private final Runnable toRun;

[...]

public Timer(Runnable toRun)
{
  this.toRun = toRun;
}

[...]

toRun.run(); // <-- Raise Event

und entsprechend

Java:
public class HeMeter implements Runnable

[...]

tmeTimer = new Timer(this);

[...]

@Override
public void run()
{
  tmeTimer_Timeout();
}
 
Danke für die Antwort, aber irgendwie habe ich das nicht richtig verstanden.

Ich habe mir jedoch mühsam aus einem anderen umfangreichen Projekt etwas rausklamüsert was meinen Vorstellungen entspricht.

Java:
	public void init() {
		Timer timer = new Timer();
		timer.schedule(new Timeout(), 2000, 2000);
	}

	private class Timeout extends TimerTask {
		public void run() {
			iCount++;
			lblLevel.setText(String.valueOf(iCount));
		}
	}
 

Zurück
Oben