Timer - Timertask endet nicht

Underfaker

Bekanntes Mitglied
Hallo zusammen,

ich habe probiert ein eigenes Tooltip zu erstellen, da es für die grafische Darstellung keines gibt, also habe ich zunächst über einen Mouselistener die richtige Position ermittelt und möchte dann das tooltip anzeigen, nach bspw. 2 Sekunden soll das Tooltip dann wieder verschwinden.
Deshalb habe ich einen Timer benutzt, der exemplarische Code sieht so aus:

Java:
if (!toolTipInput.equals(""))
{
	if (toolTip.isVisible())
	toolTip.dispose();
	toolTip = new JWindow();

	// finde richtige Position und "baue" das Tooltip"

	toolTip.setVisible(true);
							
	timer = new Timer();
	 timer.schedule(new TimerTask() {
								
		@Override
		public void run() {
		toolTip.dispose();
		   }
		}, 2000);
							
}

Leider funktioniert das nicht. Die Tasks die gestartet werden, werden offensichtlich nicht beendet, das heißt, dass zwar das Tooltip geschlossen wird aber wenn ich auf den Frame dispose() anwende, dann beendet das Programm nichtm weil noch ein Task läuft.
Ich habe es dann mal mit der Brechstange probiert und schmeiße danach einfach immer eine RuntimeException damit der Task abbricht aber auch hier funktioniert es manchmal nicht, auch dann wird das Programm nicht korrekt beendet weil dort noch etwas läuft.

Müsste der Thread nicht beendet sein, wenn der Code durchgelaufen ist? Wie kann ich dafür sorgen dass der Thread/Task definitiv beendet ist nachdem das Tooltip-Fenster geschlossen wurde?

Besten Dank und Grüße
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Nein , der Task/Thread des timers läuft weiter , weil du den Timer nicht über
Code:
timer.cancel();
beendest.

Hier ein Beispiel :

Java:
import java.util.Timer;
import java.util.TimerTask;


public class TimerExample {
	
	Timer timer;
	TimerTask task;
	
	int count = 30;
	
	public TimerExample() {
		
		timer = new Timer();
		
		task = new TimerTask(){

			@Override
			public void run() {
				if (count > 0) {
					count--;
					System.out.print(count);
				}
				
				if (count == 0) {
					System.out.println("-");
					timer.cancel();
				}
			}
		};
		
		timer.schedule(task, 0, 250);
		
		/* timer läuft ab sofort, führt alle 250ms 
		 * den ihm zugewiesenen Task aus.
		 */
	}

	public static void main(String[] args) {
		new TimerExample();
	}
}
 
Zuletzt bearbeitet:

Underfaker

Bekanntes Mitglied
timer.cancel(); hilft leider auch nicht.

1. als ich es angepasst habe auf ca. 2 Sekunden funktionierte das mit dem Tooltip garnicht mehr, er zeigte es nur noch ganz kurz an und auch dauernd garnicht, ich dachte es läge daran, dass alle auf die selbe counter-Variable zugreifen, habe es dann so geändert:

Java:
timer = new Timer();
						     
TimerTask task = new TimerTask(){
int timerCounter = 8; 
@Override
public void run() {
	if (timerCounter > 0) {
		System.out.println(timerCounter + "tc");
		timerCounter--;
	}
					               
	if (timerCounter == 0) {
		toolTip.dispose();
		timer.cancel();
	}
}
};
					       
timer.schedule(task, 0, 250);

Aber selbes Ergebnis.
Schwerwiegender ist jedoch, dass das Programm immer noch nciht beendet wird, da offensichtlich immernoch Threads laufen.
Wenn ich in meinen Code einfach noch timer.cancel(); am Ende schreibe müsste er ja abbrechen aber das macht er dann auch nicht.
 

Underfaker

Bekanntes Mitglied
Ich glaube ich habe das Problem gefunden.
Wenn man als Klassenvariable: [c]Timer timer = new Timer();[/c] schreibt, dann läuft permanent ein Thread, der nicht beendet wurde.

Danke für die Hilfe.
 

kaoZ

Top Contributor
Der Thread der läuft, bzw. gestartet wird wenn du einen neuen Timer erstellt, wird normalerweise mit

Java:
timer.cancel();
beendet, sobald das Runnable oder auch der Task durchlaufen wurde, dafür existiert diese Methode der Klasse Timer ja ,

wenn du alle laufenden Threads beenden möchtest müsstest du dies z.B mit
Code:
System.exit(0);
machen , was allerdings wieder eine Schlechte alternative darstellt weil es passieren kann das gewisse Threads ihre Arbeit nicht bis zum Ende ausführen können.

Ich vermute mal der Thread deiner Eigentlichen Applikation läuft , und ich denke das sollte auch so sein , die Klasse Timer ist dazu da um gewisse Tasks z.B Zeitlich versetzt, in einem gewissem Schema ablaufen zu lassen, soweit ich das richtig verstanden habe möchtest du damit einen Tooltip realisieren ?

Falls dem so sein sollte und ich nicht weiß was genau du vorhast , solltest du insofern du mit SWING arbeitest, dir lieber die Klassen
Code:
JToolTip
/
Code:
ToolTipManager
mal anschauen .

Nur zum Verständnis :

Das hier bedeutet das das runnable des Tasks , sofort, alle 250 ms ausgeführt wird.
Java:
timer.schedule(task, 0, 250);

nicht das der Task 250ms ausgeführt wird!

Hier nochmal ein Link der dir vielleicht weiterhilft :

Tool Tips, How to
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Frage zu util.Timer (-> TimerTask) Allgemeine Java-Themen 2
A TimerTask - Task stoppen - timer.cancel() funktioniert nicht Allgemeine Java-Themen 8
O Timer und TimerTask: Programm terminiert nicht! Allgemeine Java-Themen 3
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
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
O Timer pausieren Allgemeine Java-Themen 5
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
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
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 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
M Verständnisfrage java.util.TimerTask Allgemeine Java-Themen 2
B TimerTask Allgemeine Java-Themen 1
L Missbrauch TimerTask? Allgemeine Java-Themen 2
D Update von TimerTask Allgemeine Java-Themen 13
T [TimerTask] Pause Allgemeine Java-Themen 5
K Scheduler und TimerTask Allgemeine Java-Themen 2
N class Task extends TimerTask ohne Blockieren Allgemeine Java-Themen 15
P Observer/TimerTask Allgemeine Java-Themen 3
G Mails aus TimerTask Allgemeine Java-Themen 6
F Problem mit TimerTask Allgemeine Java-Themen 5
S process.waitFor() endet mit -1 Allgemeine Java-Themen 3
B methode wird zwar ausgeführt aber endet nach dem abschluss Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben