Timer pausieren

O

Ondine

Gast
GUten Abned,

ich habe ein Problem mit dem Timer. Ich habe einen Timer, der eine TimerTask ausführt. Ich würde die Ausführung gerne pausieren können und später wieder weiterführen können.


das ist die TimerTask
[JAVA=42]import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;

public class Schedule extends TimerTask{
JFrame f;
DrawText d; // Zeichnen des Textes
Timer t;
int position; //Positio im Array
long[] seconds; // Sekundenarray enthaelt Sekunden pro Wort
int [] indexes; // array mit Indexen der Highlightwoerter


/*
* seconds: Laenge in Mikrosekunden der Klangwoerter, indexes: Indezes der Woerter im Text,
* position = 0
*/
public Schedule(JFrame f, DrawText d, Timer t, int position, long [] seconds, int[] indexes){
this.f = f;
this.d = d;
this.t = t;
this.position = position;
this.seconds = seconds;
this.indexes = indexes;
}

public void run(){

if(position < indexes.length){
int j = indexes[position];
d.setcurrentword(j);
}
f.repaint(); //neuzeichnen
if(position < seconds.length){
Schedule t2 = new Schedule(f, d, t, position+1, seconds, indexes);
t.schedule(t2, seconds[position]/1000);
//neuer Task mit naechsten Zeiten
}
}
}[/code]


und so starte ich den timer
[JAVA=42]
timer = new Timer();
t = new Schedule(f, p, timer, 0, mp, po);

timer.schedule ( t, 0 );[/code]

irgendwie scheint es keine einfach Lösung für dieses Problem zu geben. Ich hab jedenfalls keine gefunden, obwohl das Problem ja ein ganz simples ist.

Noch mal zur Aufklärung: ich möchte später, wenn der benutzer in der GUI den Button "Pause" klickt, die Aufgabe die der Timer ausführt pausieren, wenn der Benutzer dann wieder den Button "Play" klickt, soll der Timer die Aufgabe wieder aufnehmen.

Würde mich über eine Lösung freuen.
 

antrox

Mitglied
du kannst einen timer nicht pausieren und "dann wieder anfangen wo er aufgehoert hat"

darueber sind keine informationen vorhanden. und ein timer, ist kein objekt welches attribute besitzt z.B.

du kannst dir mit statischen variablen ergebnisse merken nachdem der pause button t.cancel ausgefuehrt hat und mit dem play button kannst du dann wieder einen neuen timer starten der die global abgespeicherten ergebnisse wieder aufnimmt

pause und play bei timers gibt es so nicht meines wissens
 
P

pmias

Gast
Wie mein Vorredner schon sagte, Timer lassen sich nicht direkt pausieren. Du hast prinzipiell zwei Möglichkeiten, wenn Du pausieren möchtest:

1. Timer zerstören (cancel()) und beim Aufheben der Pause Timer neu instanzieren und alle TimerTasks neu scedulen.

2. Laß Deine TimerTasks eine gemeinsame Bool-Variable "pause" abfragen. Wenn diese true ist, wird im Task nicht weiter gearbeitet.
 

antrox

Mitglied
Hallo,

ginge pausieren folgendermaßen?

Timer ist alle 400 ms z.B. ausgefuehrt...

Der Timer hat eine WHILE Schleife die von einer STATISCHNE BOOLEAN abhaengig ist. Sie wird bei TRUE durchlaufen. Außerhalb des Timers wird der Boolean auf FALSE gesetzt und dann geht der naechste planmaeßige Durchlauf des Timers einfach ohne die WHILE Schleife durch, also macht dieser Durchlauf gar nichts! Korrekt?

Der "PLAY!"- Button setzt dann diese STATISCHE Variable auf TRUE, so dass die WHILE Schleife wieder beachtet wird.

Klingt erstmal doch ganz gut ODER wird hier der Timer gekillt? Weil der Durchlauf sinnlos ist? Wie sieht das in Java aus?

Gruß
 

antrox

Mitglied
folgendes geht

der timer laeuft die ganze zeit weiter, aber macht nur wenn TEST.b == true ist.

also kann man das auch "Pausieren" ;)
 
Zuletzt bearbeitet:

antrox

Mitglied
Java:
import java.util.Timer;


public class TEST {
	
	public static boolean b;
	
	public static void main(String[] args) {
		
		b = true;
		
		Timer t = new Timer();
		Task task = new Task();
		
		t.scheduleAtFixedRate(task, 1000l, 2000l);
		char c;
		
		while(true){
			c = IO.readChar("s fuer STOP! - g fuer GO!" + "\n");
			System.out.println();
			if (c == 's'){
				TEST.b = false;
			}
			if (c == 'g'){
				TEST.b = true;
			}
		}
	}
}

Java:
import java.util.TimerTask;


public class Task extends TimerTask{
	
	private int i;
	
	public Task(){
		super();
		this.i = 0;
	}
	
	@Override
	public void run() {
		if(TEST.b){
			System.out.println(i++);
		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Timer terminiert nicht Allgemeine Java-Themen 5
W Timer Konzept-Frage Allgemeine Java-Themen 16
Z Timer Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
Tacofan Kurzer Timer Allgemeine Java-Themen 22
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
H Consumer (Java8 Lambda) an Timer übergeben Allgemeine Java-Themen 2
wolfgang63 Best Practice Taktgeber oder Timer mit variablem Intervall Allgemeine Java-Themen 1
I Timer Allgemeine Java-Themen 1
X Timer Allgemeine Java-Themen 3
C Timer? Allgemeine Java-Themen 8
U Timer - Timertask endet nicht Allgemeine Java-Themen 4
X timer.schedule - Allgemeine Java-Themen 7
D Simpler Timer zum warten Allgemeine Java-Themen 19
H java.util.Timer und Funktion mit SQL Exception Allgemeine Java-Themen 5
G Threads Timer wird unterbrochen Allgemeine Java-Themen 20
P Java Timer Allgemeine Java-Themen 3
K Timer Thread Allgemeine Java-Themen 8
E Wie Timer anbringen mit Designer in Netbeans Allgemeine Java-Themen 5
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
B util.Timer zu langsam? Allgemeine Java-Themen 3
P Java Timer Allgemeine Java-Themen 2
S Timer in Applet? Allgemeine Java-Themen 11
G Swing Timer führt Methode nicht aus Allgemeine Java-Themen 2
V Frage zu util.Timer (-> TimerTask) Allgemeine Java-Themen 2
P Swing Eine Sekunde warten (Timer) Allgemeine Java-Themen 7
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
T Timer oder Alternative? Allgemeine Java-Themen 3
Z Timer -> Thread jeden Tag ausführen Allgemeine Java-Themen 5
D Probleme mit einem Timer Allgemeine Java-Themen 6
E Timer - gleichen Task mehrfach planen Allgemeine Java-Themen 2
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
A TimerTask - Task stoppen - timer.cancel() funktioniert nicht Allgemeine Java-Themen 8
S Problem mit einem Timer (Aktualisierung etc.) Allgemeine Java-Themen 2
B Timer übergabe Allgemeine Java-Themen 3
G Timer abbrechen und neu starten Allgemeine Java-Themen 3
G timer mit buttondruck abbrechen Allgemeine Java-Themen 7
T Timer oder ähnliches? Allgemeine Java-Themen 3
O Timer und TimerTask: Programm terminiert nicht! Allgemeine Java-Themen 3
O Thread als Timer Interrupt Allgemeine Java-Themen 2
C Timer.scheduleAtFixedRate(). Allgemeine Java-Themen 5
H gibts in Java sowas wie in Visual Basic den Timer? Allgemeine Java-Themen 5
B 24 Uhr Timer Task Allgemeine Java-Themen 5
G Timer nur 64 mal pro Sekunde? Allgemeine Java-Themen 18
S Frage zu jTDS, JAVA allgemein und Timer Allgemeine Java-Themen 6
L Problem mit Timer Allgemeine Java-Themen 7
J Timer-Objekt / Task-Zustand ermitteln Allgemeine Java-Themen 5
N Pausieren eines Programmes Allgemeine Java-Themen 4
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
Y Thread pausieren Allgemeine Java-Themen 6
J Thread pausieren, lange while-Schleife Allgemeine Java-Themen 8
M Thread pausieren Allgemeine Java-Themen 8
M Threads von aussen "pausieren" lassen Allgemeine Java-Themen 2
F Pausieren eines abspielenden MP3 Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben