Swing kann ich einen laufenden Timer mitten in der Ausführung abbrechen?

VfL_Freak

Top Contributor
Hallo zusammen,

in meiner (Swing-)Anwendung verwende ich einen javax.swing.timer.

ich habe mittlerweile festgestellt, dass ein Abbruch mitten im zugehörigen Code-Block nicht möglich ist. Wenn ich ihn von 'außerhalb' stoppe, werde ja noch alle Aktionen bis zum Ende des Codeblocks ausgeführt, ehe sich der Stop-Aufruf auswirkt (oder anders ausgedrückt: ein timer.stop() verhindert "lediglich" das erneute Ausführen).

Ich habe mir mittlerweile auch mal die API zum TimerTask zu Gemüte geführt, habe es aber so verstanden, dass hier ein timer.cancel() den gleichen Effekt hat, richtig ?

Kennt jemand eine andere Möglichkeit oder einen Trick, dieses Abbrechen zu bewerkstelligen?

Gruß
Klaus
 

André Uhres

Top Contributor
Hallo Klaus,

nach meiner Erfahrung funktioniert ein "timer.stop()" auch innerhalb der "actionPreformed" Methode. Könntest du bitte mal deinen Code zeigen?
Gruß,
André
 

VfL_Freak

Top Contributor
Hallo André,

erstmal Danke für Deine Antwort!

Also, der stop-Aufruf (genau genommen soll es eigentlich auf ein restart mit verlängertem Delay rauslaufen) soll ja von außerhalb angestossen werden.

Aber es ist doch eigentlich egal, da sich IMHO sowohl stop als auch restart erst dann auswirken, wenn der aktuelle Durchlauf abgearbeitet ist - sprich: beim nächsten Event, oder nicht ???:L Zumindest entnehme ich das so der API (gleiches gilt ja wohl auch für das cancel beim TimerTask ...)

Hier mal der komplette Code des Timers, ob wohl ich bezweifele, dass Du viel Freude dran haben wirst :D
Der Delay-Wert TIMER_INTERVALL wird an unterschiedlichsten Stellen in der Anwendung neu berechnet und soll hier im gegebenen Fall unter gewissen Umständen um einen Faktor X verlängert werden (bspw. statt 10 sec.--> 30 sec.)
Dies soll sich aber SOFORT in dem Moment des Setzens auswirken (also eigentlich restart) und nicht erst beim nächsten Durchlauf .....

'ne schmutzige Idee, wäre vlt. eine (boolsche) Variable um die einzelnen Methoden aufrufe, um ggf. den Duchlauf zu beschleunigen!
Allerdings dauert ein Durchlauf im Idealfall eh' nun max. 2 sec. und im Extremfall ca. 6 - 8 sec. :noe:
Java:
  /**
   * Haupt-Zeitschleife, hier werden alle zyklisch ablaufenden Aktionen gestartet
   */
  public Timer MainTimer = new Timer( TIMER_INTERVALL, new ActionListener() 
  {
	  public void actionPerformed( ActionEvent evt ) 
	  {
		  int iStartDelay = MainTimer.getDelay();
		  Date datStart = new Date();
		  System.out.println(">>> START MainTimer-Funktionen um <" +  datStart + ">  DELAY: " + iStartDelay + " <<<<<");
		  
		  if( bIsValidClient ) 
		  {
			  if( !WorkerWorkingStatus.getInstance().isAlarmInProgress() ) 
			  {
				  if( bLoggedIn ) 
				  {
					  byte[] aErg = null;
					  WSRequestGetMasterStatus wsc = new WSRequestGetMasterStatus();
					  aErg = wsc.communicate();
					  if( aErg != null ) 
					  {
						  ProcessThreadData( aErg, aErg.length );  // case (ID_REQ_LCMD_MONGETMASTERSTATUS): 
					  }
					  wsc = null;
				  }
			  }
			  try 
			  {
				  Thread.sleep( TIMEMASTERSTATUS );
			  }
			  catch (InterruptedException ex1) 
			  {
				  return;
			  }
        
			  if( bIsActiveMaster ) 
			  {
				  if( !WorkerAlarmRequestFlag.getInstance().isLocked() ) 
				  {
					  sendMCDClientWorkingMode_FT( IWorkerWorkingStatus.WORKERWORKINGSTATUS_REQUEST, true );
					  if( !bDelayRequest ) 
					  {
						  if( !WorkerWorkingStatus.getInstance().isAlarmInProgress() ) 
						  {
							  SetRequestAlarmPOHButtonsLock( true );
							  byte[] aErg = null;
							  if( (com.gselectronic.worker.status.AlarmGetModeStatus.getInstance().getAlarmGetMode() == com.gselectronic.worker.status.IAlarmGetModeStatus.AGM_DoNothing) && (bLoggedIn)) 
							  {
//								  Date datAlarmSuche = new Date();
//								  System.out.println( ">>> WS:   Start AlarmSuche     um <" + datAlarmSuche + ">" );
								  com.gselectronic.worker.status.AlarmGetModeStatus.getInstance().setAlarmGetMode(com.gselectronic.worker.status.IAlarmGetModeStatus.AGM_Request);
								  WSRequestAlarmTextV2 wsc = new WSRequestAlarmTextV2();
								  aErg = wsc.communicate();		
								  if( aErg != null ) 
								  {
									  ProcessThreadData( aErg, aErg.length ); // case( ID_REQ_LCMD_MONGETALARMV2 ) :
								  }
								  wsc = null;
							  }
							  else 
							  {
								  com.gselectronic.worker.status.AlarmGetModeStatus.getInstance().setAlarmGetMode( com.gselectronic.worker.status.IAlarmGetModeStatus.AGM_DoNothing );
							  }
						  }
					  }
				  }
      			
				  if( !WorkerWorkingStatus.getInstance().isAlarmInProgress() ) 
				  {
					  final String strIP = Config.getInstance().m_strIPColocation;
					  byte[] aErg = null;
					  try 
					  {
						  aErg = ( byte[]) Worker.post(new Task() 
						  {
							  public Object run() throws Exception 
							  {
								  return requestWSServerDateTimeFT( strIP );
							  }
						  });
					  }
					  catch( Exception x ) 
					  {
						  // never thrown
					  }
      					
					  if( aErg != null ) 
					  {
						  ProcessThreadData( aErg, aErg.length ); // case (ID_REQ_CMD_GETSERVERTIMESTR):
					  }
				  }
			  } // if( bIsActiveMaster ) 
			  else 
			  {
				  WorkerWorkingStatus.getInstance().setForcedRelogin( true );
				  mnuPause.doClick();
				  WorkerWorkingStatus.getInstance().setForcedRelogin( false );
				  mnuPause.doClick();
			  }
      			
			  if( bIsInvalidMCDIP ) 
			  {
				  WorkerWorkingStatus.getInstance().setForcedRelogin( true );
				  mnuPause.doClick();
				  WorkerWorkingStatus.getInstance().setForcedRelogin( false );
				  mnuPause.doClick();
				  bIsInvalidMCDIP = false;
			  }

			  if( bRequestReplilistCheck ) 
			  {
				  startStopAusfallMCDCheckTimer( true );

				  boolean bErg = false;
				  byte[] aErg = null;
				  try 
				  {
					  aErg = (byte[]) Worker.post( new Task() 
					  {
						  public Object run() throws Exception 
						  {
							  Date datMCD = new Date();
							  System.out.println( ">>> MCD:  Start ID_REQ_LCMD_MONGETREPLILIST-1 um <" + datMCD + ">" );
							  return requestMCDReplilistFT( "", MCDSOCKETTIMEOUT, false );
						  }
					  });
				  }
				  catch( Exception x ) 
				  { 
					  // never thrown
				  }

				  if( aErg != null ) 
				  {
					  bErg = ProcessThreadData( aErg, aErg.length );  // Aufruf von: PTD_monGetRepliList
				  }
				  else 
				  {
					  bErg = false;
				  }

				  if( USELOOPEDMCDRETRYS ) 
				  {
					  if( !bErg ) 
					  {
						  for( int i = 0; i < (int)(Config.getInstance().m_AUSFALLCHECKFAKTOR - 1); i++ ) 
						  {
							  try 
							  {
								  aErg = (byte[])Worker.post( new Task() 
								  {
									  public Object run() throws Exception 
									  {
										  Date datMCD2 = new Date();
										  System.out.println( ">>> MCD:  Start ID_REQ_LCMD_MONGETREPLILIST-2 um <" + datMCD2 + ">" );
										  return( requestMCDReplilistFT("", MCDSOCKETTIMEOUT, false) );
									  }
								  });
							  }
							  catch( Exception x ) 
							  {
								  // never thrown
							  }
            			
							  if( aErg != null ) 
							  {
								  bErg = ProcessThreadData(aErg, aErg.length);  // Aufruf von: PTD_monGetRepliList
							  }
							  else 
							  {
								  bErg = false;
							  }
							  if (bErg) 
							  {
								  break;
							  }
						  }
					  }
				  } // if( USELOOPEDMCDRETRYS ) 
          
				  if( bErg ) 
				  {
					  requestMCDALSTInfos_FT(true);
				  }
      				
				  bMCDIPisValid = bErg;
				  if( bMCDIPisValid ) 
				  {
					  if( frmCon != null	) 
					  {
						  frmCon.Msg( true, "MCD: Wiederaufruf in " + Config.getInstance().CHECKMCDTIMER_INTERVALL / 1000 + " Sek.\n" );
					  }
					  System.out.println( ">>> MCD:  Wiederaufruf in " + Config.getInstance().CHECKMCDTIMER_INTERVALL / 1000 + " Sek." );
					  bIsInvalidMCDIP = false;
				  }
				  else 
				  {
					  if( frmCon != null ) 
					  {
						  if( Config.getInstance().m_strIPMCD.equals("") ) 
						  {
							  frmCon.Msg( true, "MCD: MCD-Kontakt (IP : " + Config.getInstance().m_strIPMCD + ") fehlgeschlagen\n" );
						  }
					  }
					  System.out.println( ">>> MCD:  MCD-Kontakt (IP : " + Config.getInstance().m_strIPMCD + ") fehlgeschlagen" );
					  Config.getInstance().m_strIPMCD = "";
					  bIsInvalidMCDIP = true;
				  }
				  bRequestReplilistCheck = false;
			  }
		  }

		  iStartDelay = MainTimer.getDelay();
		  Date datEnde = new Date();
		  System.out.println(">>> ENDE  MainTimer-Funktionen um <" +  datEnde + ">  DELAY: " + iStartDelay + " <<<<<\n####################" );
	  } // actionPerformed
  }  ); // Ende MainTimer

Danke und Gruß
Klaus
 

André Uhres

Top Contributor
Hallo Klaus,

ich habe das nur mal überflogen: auf den ersten Blick sehe in deinem Code aber keinen MainTimer.stop() oder MainTimer.restart(), was den laufenden Timer mitten in der Ausführung abbrechen würde. Aber vielleicht stehe ich ja auch nur auf dem Schlauch?

Gruß,
André

EDIT: übrigens schreibt man Variablennamen gewöhnlich klein: [c]public Timer mainTimer[/c]
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Hallo André,

ich habe das nur mal überflogen: auf den ersten Blick sehe in deinem Code aber keinen MainTimer.stop() oder MainTimer.restart(), was den laufenden Timer mitten in der Ausführung abbrechen würde. Aber vielleicht stehe ich ja auch nur auf dem Schlauch?
Naja, ich will den Timer ja auch aus anderen Klassen heraus abbrechen. Habe aber festgestellt, dass das auch nicht klappt, da der aktuelle Durchlauf auf jeden Fall bis zum Ende läuft! Erst dann wirkt sich ein Stop-Kommando aus ...


übrigens schreibt man Variablennamen gewöhnlich klein: [c]public Timer mainTimer[/c]
ja, dass sind Altlasten ... :eek:

Gruß
Klaus
 

VfL_Freak

Top Contributor
Moin André,

ok, ist vlt. auch noch eine Idee ...
Ich werde mal versuchen, ob sich das über eine Variable steuern läßt :)

Danke und Gruß
Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Reaktion auf einen SplitScreenTrenner? AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
P Wie lese ich einen jRadioButton aus? AWT, Swing, JavaFX & SWT 21
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
H JavaFX via .fxml einen abgeleiteten Button erstellen... AWT, Swing, JavaFX & SWT 4
S Swing GANZE Row auf einen Schlag einfärben AWT, Swing, JavaFX & SWT 2
B JavaFX Wie programmiere ich hier einen "Weiter" Button? AWT, Swing, JavaFX & SWT 11
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
L Wie realisiere ich einen Controller AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
F JavaFX Erstelle einen Wald AWT, Swing, JavaFX & SWT 6
Thallius Swing Aufgabe für einen der gerne Tüftelt. AWT, Swing, JavaFX & SWT 4
M JavaFX Wie füge ich zu einer WebEngine einen Flash Player hinzu AWT, Swing, JavaFX & SWT 3
G AWT Wie bekomme ich einen zeitgesteuerten robot hin? AWT, Swing, JavaFX & SWT 6
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
M Swing Mit Java in der GUI einen Belegungsplan einfügen AWT, Swing, JavaFX & SWT 23
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
H Swing Hintergrundbild in einen JFrame einfügen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
J Swing JTable-Event für einen Select?? AWT, Swing, JavaFX & SWT 3
P Swing RadioButtons - nur einen auswählen AWT, Swing, JavaFX & SWT 3
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
J JFrame in einen JFrame anzeigen AWT, Swing, JavaFX & SWT 2
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
T Einen Kreis anzeigen AWT, Swing, JavaFX & SWT 14
M SWT /Jface Wann einen ColumnLabelProvider benutzen? AWT, Swing, JavaFX & SWT 2
-horn- WorldWindJava+JOGL soll einen animierten Graphen anzeigen, wie? AWT, Swing, JavaFX & SWT 4
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Alles auf einen Panel Zeichnen AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Neue Farbe für einen Teilbereich einer Linie? AWT, Swing, JavaFX & SWT 8
M 3D-Grafik verschiedene Texturen auf einen Würfel mappen AWT, Swing, JavaFX & SWT 15
P Swing JTabbedPane mit JButton einen anderen Tab anzeigen AWT, Swing, JavaFX & SWT 9
G Mit Java einen Button wie z.B. im Opera 10.63 erzeugen AWT, Swing, JavaFX & SWT 3
F Swing Beenden eines ActionListener über einen Button AWT, Swing, JavaFX & SWT 8
M Jframe wie bekommt man bei den zeile einen header erzeugen AWT, Swing, JavaFX & SWT 2
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
K LookAndFeel LookAndFeel nur für einen Frame? AWT, Swing, JavaFX & SWT 6
J Swing Kalender soll auf Buttondruck einen Monat weiterblättern AWT, Swing, JavaFX & SWT 7
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
B LookAndFeel für einen Komponenten AWT, Swing, JavaFX & SWT 2
T Ordner öffnen nach Klick auf einen Button AWT, Swing, JavaFX & SWT 3
C AWT Oval nur für einen bestimmten Schritt zeichnen AWT, Swing, JavaFX & SWT 5
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
T Swing Wie kann ich einen String in ein TreePath umwandeln? AWT, Swing, JavaFX & SWT 5
B Restart-Funktion für einen Updatemechanismus?????? AWT, Swing, JavaFX & SWT 4
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
E Swing Zugriff auf Attribute eines JFrames über einen JDialog AWT, Swing, JavaFX & SWT 2
S Swing JTree in ScrollPane einen ToolTip geben AWT, Swing, JavaFX & SWT 2
C Einen JDialog aus einem JDialog aufrufen AWT, Swing, JavaFX & SWT 3
MQue gelbes Warndreieck um einen JFrame AWT, Swing, JavaFX & SWT 6
S Objektverhalten in einen Thread legen AWT, Swing, JavaFX & SWT 4
F Einen einfachen JTree anhand eines Arrays aufbauen AWT, Swing, JavaFX & SWT 9
J Einen JSlider ähnlich wie in OO3 AWT, Swing, JavaFX & SWT 5
G Wie lasse ich einen Graphen zeichnen(mit einer ArrayList)? AWT, Swing, JavaFX & SWT 5
T 2JLabels in einen JTable Header AWT, Swing, JavaFX & SWT 2
R Ich suche einen sehr simplen. AWT, Swing, JavaFX & SWT 2
G Date in einen String umwandeln AWT, Swing, JavaFX & SWT 4
T JFileChooser: beim Save Dialog einen Dateinamen vorgeben? AWT, Swing, JavaFX & SWT 6
P Einen Komponent zweimal zu einem Panel hinzufügen? AWT, Swing, JavaFX & SWT 18
S Will einen Punkt zeichnen aber krieg das net hin. AWT, Swing, JavaFX & SWT 2
E Duch jFileChooser oä. einen Ordner Pfad angeben AWT, Swing, JavaFX & SWT 3
N Kennt jemand einen WYSIWYG Editor für AWT? AWT, Swing, JavaFX & SWT 4
I Wie mache ich einen modalen JPanel? AWT, Swing, JavaFX & SWT 2
I Listener für einen JSlider AWT, Swing, JavaFX & SWT 1
G An die Quelle einen events kommen AWT, Swing, JavaFX & SWT 2
J JTable nachträglich in einen JScrollPane einfügen AWT, Swing, JavaFX & SWT 6
S PopupMenü --> auf einen JButton zugreifen AWT, Swing, JavaFX & SWT 6
E JComboBox: einen Eintrag "unselectable" setzen AWT, Swing, JavaFX & SWT 7
K Automatisch einen Dialog schliessen AWT, Swing, JavaFX & SWT 15
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
S Automatisches Rendern einen JPanels AWT, Swing, JavaFX & SWT 8
L Wie benutze ich einen robot richtig für screencapture AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben