int delay = 1000;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
//CODE
}
}, delay, points.getLevelSpeed());
points.getLevelSpeed();
So habe ich das nicht gemeint, meinte nur es gibt auch eine Welt ohne Timer/TimerTask ;-)Ich habe schon gemerkt, dass der Timer wohl nicht wirklich das richtige ist.
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = createNewTask();
timer.schedule(task, 0, 500);
try {Thread.sleep(3000);}//kuenstliche Pause, um das Warten auf Events o.ä. zu simulieren
catch (InterruptedException e) {e.printStackTrace();}
task.cancel();
timer.purge();
task = createNewTask();
timer.schedule(task, 0,100);
try {Thread.sleep(3000);}//kuenstliche Pause, um das Warten auf Events o.ä. zu simulieren
catch (InterruptedException e) {e.printStackTrace();}
timer.cancel();
}
public static TimerTask createNewTask() {
return new TimerTask() {
public void run() {
doSomething();
}
};
}
private static void doSomething() {
System.out.println("I have to do something!");
}
Du musst ja aufgrund irgend eines Ereignisse den Task wechseln z.B. Level/Zeit ist um.Was genau soll diese künstliche Pause simulieren? Was für Events?
ja sicher wenn die entsprechenden Objekte innerhalb der Methode bekannt sind.Kann ich cancel und purge auch in der run()-Methde aufrufen, um jede Sekunde zu prüfen, ob schon ein neuer Task gestartet werden muss (mit schnellerer Zeit)?
final Timer timer = new Timer();
TimerTask task = createNewTask();
timer.schedule(task, 1000, points.getLevelSpeed());
Timer proofTimer = new Timer();
TimerTask proofTask = new TimerTask() {
public void run() {
if(levelSpeed<points.getLevelSpeed()) {
//Levelspeed wird erhöht
levelSpeed = points.getLevelSpeed();
tetris.newTask = true;
}
if(tetris.newTask==true) {
//Neuer Task für ersten Timer muss gesetzt werden
task.cancel();
timer.purge();
task = createNewTask();
timer.schedule(task, 1000,100);
}
}
};
Indem man eine eigene Klasse schreibt, die das benötigte Interface implementiert oder von der Klasse erbt, deren Methode man überschreibt.Wie arbeitet man "ohne anonyme Klasse"?
import java.util.Timer;
import java.util.TimerTask;
public class TimerTaskDemo {
private Timer timer;
public void startDemo() {
timer = new Timer();
timer.schedule(new ChangeTask(), 0, 3000);
}
public static void main(String[] args) {
new TimerTaskDemo().startDemo();
}
class MyTask extends TimerTask {
public long l;
public MyTask(long l) {
this.l = l;
}
public void run() {
System.out.println("blub " + l);
}
}
class ChangeTask extends TimerTask {
private int i=0;
private long[] periods = {1000, 500, 250, 125};
private TimerTask task;
public void run() {
if (i>=periods.length)
timer.cancel();
else {
if (task!=null)
task.cancel();
task = new MyTask(periods[i]);
timer.purge();
timer.schedule(task, 0, periods[i]);
i++;
}
}
}
}