Richtige Verwendung eines Timers

pro2

Bekanntes Mitglied
Mal angenommen ich habe eine Methode x(), diese setzt einen boolean auf true. 5sec später möchte ich diesen boolean wieder auf false setzen. Wie setze ich da korrekt einen Timer ein? Oder gibt es eine bessere Methode?
Muss ich mir da extra ne Klasse mit einer run() Methode erstellen? Wobei das ja auch schon wieder "problematisch" mit dem Zugriff (ist zwar kein Problem, aber eine suboptimale Lösung) auf die Variable ist.

Wäre nett, wenn mir da jemand ein gutes Beispiel geben könnte.

Danke!
 
Ich habe das gesehen aber geht das nicht unkomplizierter? Also ohne dass ich mir eine Klasse erstelle, die mir dann das Event ausführt. Ist doch viel zu "umständlich", um eine Variable zu verändern :x
 
Gut, dann werde ich das wohl so machen müssen. Danke.

Noch eine Frage: Es wäre ja blöd wenn ich jetzt 10 innere Klassen schreibe, nur weil ich 10 Variablen habe. Eine Möglichkeit wäre ja, dass ich meiner Klasse irgendwas im Konstruktor mitgebe, auf dass ich dann prüfe und dementsprechend die Variable verändere.
Kann ich denn auch irgendwie direkt die Variable mitgeben, die verändert werden soll? Also dass ich dann direkt wirklich die Variable der anderen Klasse bearbeite.
 
Schon klar, aber meine eigentliche Frage ist, wie ich der Klasse bzw. der run() Methode am besten mitteile, welche Variable auf false gesetzt werden soll.
 
Keine Ahnung was das werden soll.
Üblicherweise werden Variablen anderer Objekte über Methoden (zurück)gesetzt.
Weiss nicht, ob's passt: Der relevanten Klasse eine reset-Methode spendieren und diese in der TimerTask am entsprechenden Objekt aufrufen.
 
Schon klar, aber meine eigentliche Frage ist, wie ich der Klasse bzw. der run() Methode am besten mitteile, welche Variable auf false gesetzt werden soll.

Na ja, vielleicht hilft dir das weiter. Interfaces sind sehr hilfreich und Events müssen auch nicht immer sein ...

Java:
public class Test {

	private static interface MusterInterface {
		public void reset();
	}

	private static class MusterBoolean implements MusterInterface {

		private boolean test = false;

		public void setTest() {
			test = true;
		}

		@Override
		public void reset() {
			System.out.println("---> setze test auf false");
			test = false;
		}
		@Override
		public String toString(){
			return "" + test;
		}
	}

	private static class MusterInt implements MusterInterface {

		private int test = 0;

		public void setTest(int i) {
			test = i;
		}

		@Override
		public void reset() {
			System.out.println("---> setze test auf 0");
			test = 0;
		}
		@Override
		public String toString(){
			return "" + test;
		}
	}

	private static class Timer extends Thread {
		private final long time;
		private final MusterInterface iref;
		public Timer(long t, MusterInterface i) {
			time = t;
			iref = i;
		}

		@Override
		public void run() {
			try {
				sleep(time);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			iref.reset();
		}
	}

	@Override
	public String toString() { return "Hello world";}

	public static void main(String[] args) {
		MusterBoolean mb = new MusterBoolean();
		mb.setTest();
		Timer t1 = new Timer(3333, mb);
		t1.start();
		MusterInt mi = new MusterInt();
		mi.setTest(42);
		Timer t2 = new Timer(2222, mi);
		t2.start();
		for(int i=0; i<5; i++) {
			System.out.println("===========================");
			System.out.println("Zeit : " + i);
			System.out.println(mb);
			System.out.println(mi);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
 

Zurück
Oben