Update von TimerTask

DieDreiJavas

Mitglied
Hallo!
Wir programmieren ein Spiel und möchten die Zeit messen. Dafür haben wir die TimerTask-Klasse benutzt.

Java:
package projekt.control;

import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JLabel;


public class Task extends TimerTask
{
	JLabel uhrlabel;
	

        int zeit = 1;
	
     public void run()  
     {
      System.out.println(zeit + "Sekunden verstrichen" );
      zeit++;
    
      }
	
      public void fuehreTimerAus()
      {
		Timer timer = new Timer();

		timer.schedule ( new Task(), 2000 );

		timer.schedule ( new Task(), 1000, 1000 );

	}
	
	public JLabel Uhranzeigen()
	{
		JLabel uhrlabel = new JLabel (zeit+"Sekunden verstrichen");
		uhrlabel.setText(zeit + "Verstrichene Zeit");
		return uhrlabel;
	}
}

In der GUI wird dann das JLabel "uhrlabel" in den JFrame eingefügt
Java:
	public void updateZeitlabel()
	{
		
		
		Task uhr = new Task();
		contentPane.add(BorderLayout.SOUTH, uhr.Uhranzeigen() );
	}
Das JLabel wird auch angezeigt, allerdings läuft die Uhr nicht weiter. In der Konsole wird die Zeit richtig angezeigt. Gibt es eine Möglichkeit, die Uhrzeit im JLabel zu updaten?
Vielen Dank schonmal!:)
 

DieDreiJavas

Mitglied
hm ,nee, irgendwie haben wirs anscheinend doch noch nicht so ganz verstanden^^...
unsere Methode run() sieht jetzt so aus:
Java:
	public void run()  
  {
    System.out.println(zeit + "Sekunden verstrichen" );
    JLabel uhrlabel = new JLabel (zeit+"Sekunden verstrichen");
	uhrlabel.setText(zeit + "Verstrichene Zeit");
    zeit++;
    
  }
und es passiert nichts :(! Was muss denn in den anderen Methoden geändert werden bzw. ist es so wie wirs gemacht haben überhaupt der richtige Anfang ???:L
 

mjdv

Bekanntes Mitglied
Vielleicht solltest du nicht jedes mal ein neues JLabel erstellen, sondern das nutzen was du auch auf dem JFrame anzeigst.
 

DieDreiJavas

Mitglied
Genau, das ist dann das JLabel uhrlabel.
Die Methode Uhranzeigen() wird von der GUI aufgerufen und dann wird das JLabel im JFrame angezeigt. Allerdings steht dann dort eben nur "1 Sekunde verstrichen", die Zeit läuft nur in der Konsole weiter. Wenn wir setText in die run()-Methode schreiben geht garnichts mehr.
Also wo genau wird denn die Zeit auf dem JLabel hochgezählt?:bahnhof:
 

Michael...

Top Contributor
Also wo genau wird denn die Zeit auf dem JLabel hochgezählt?:bahnhof:
Nirgends, da Du in der run - wie bereits von mjdv erwähnt - jedes mal ein neues JLabel erstellst. Das ist natürlich Schmarrn.
Wie ich gerade gesehen habe hast Du in dem ersten Code zwei Variablen mit dem Namen uhrlabel. Eine Instanzvariable, die nicht initialisiert wird und lokale Variable die nur in der Methode "Uhranzeigen" (Methodennamen beginnen in Java üblicherweise mit einem kleinBuchstaben).
Du benötigst aber nur die Instanzvariable und solltest das
Code:
JLabel
vor uhrlabel in der Methode entfernen.
 

DieDreiJavas

Mitglied
Ah, so ist das gemeint, ok!
Also wir haben den Quellcode jetzt geändert:
Java:
package projekt.control;

import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JLabel;



public class Task extends TimerTask
{
	

    int zeit = 1;
    JLabel uhrlabel = new JLabel();
    
	public void run()  
  {
    System.out.println(zeit + "Sekunden verstrichen" );
    uhrlabel.setText(zeit + "Sekunden  verstrichen");
    zeit++;
  }
	
	public void fuehreTimerAus()
	{
	
		Timer timer = new Timer();

		timer.schedule ( new Task(), 2000 );

		timer.schedule ( new Task(), 1000, 1000 );

	}
	
	
	public JLabel uhranzeigen()
	{
		uhrlabel.setText(zeit + "Sekunden verstrichen");
		zeit++;
		return uhrlabel;
	}
	

}
allerdings mit demselben Ergebnis :(!
Was wir auch noch überlegt haben, in die Methode
Java:
 uhranzeigen()
nur
Java:
 return uhrlabel;
zu schreiben, weil so der Code ja doppelt dasteht, aber dabei ist dann eine NullPointerException aufgetreten. Die Methode
Java:
 run()
kann man auch nicht in der Gui-Klasse aufrufen... :bahnhof:
 

Michael...

Top Contributor

DieDreiJavas

Mitglied
vielen Dank für deine Hilfe! Irgendwie schaffen wir aber trotzdem es nicht, das Beispiel für unsere Zwecke umzubauen... unser Quellcode sieht jetzt so aus, die NullPointerException tritt allerdings jetzt wieder auf (haben die Stelle im Quellcode kommentiert):
Java:
package projekt.control;

import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JLabel;

import projekt.view.Gui;



public class Task extends TimerTask
{
	

	Gui g;
	int zeit = 1;
    public static JLabel uhrlabel;

    
	public void run()  
  {
    System.out.println(zeit + "Sekunden verstrichen" );
   
    //hier tritt die NullPointerException auf:
    uhrlabel.setText(zeit + "Sekunden  verstrichen");
    
    uhrlabel.setVisible(true);
    zeit++;
    g.updateZeitlabel();
  }
	
	public void fuehreTimerAus()
	{
	
		Timer timer = new Timer();

		timer.schedule ( new Task(), 2000 );

		timer.schedule ( new Task(), 1000, 1000 );

	}

}
der relevante Quellcode in der Gui sieht so aus:
Java:
	public void updateZeitlabel()
	{
		contentPane.add(BorderLayout.SOUTH, Task.uhrlabel );
	}
und das Ganze wird so aufgerufen:
Java:
		if (kommando.equals("Neues Spiel"))
		{
			
		gui.starteSpiel();
			//das Deckblatt soll verschwinden (mit setVisible(false)), das Spielfeld soll aufgebaut werden
			
			//Objekt der Klasse Task erzeugen, mit dem Objekt die Methode fuehreTimerAus aufrufen
			Task uhr = new Task();
			uhr.fuehreTimerAus();
			gui.updateZeitlabel();
			
		}
Vielen Dank :)
 

discipulo

Mitglied
Ich vermute das liegt daran das dein Task.uhrlabel gar nicht auf dein Panel gesetzt wird. Daher NullPointer
Java:
 contentPane.add(Task.uhrlabel, BorderLayout.SOUTH);

Erst die Komponente dann die Borderkonstante;)
 

Michael...

Top Contributor
Die NPE kommt weil vermutliche nirgends
Code:
uhrlabel = new JLabel()
steht und bitte die Variable nicht static machen!
Dann sind da immernoch diese zweimalig Aufrufe von schedule in der Methode fuehreTimerAus mit jeweils new Task(), d.h. es exitieren dann mindestens drei Task Objekte (ist sicher nicht so gewünscht) Warum nicht einfach nur:
Java:
timer.schedule(this, 1000, 100);
Des weiteren wird in dieser
Code:
updateZeitlabel()
das Label in irgend einer GUI platziert. Ist das Label nicht von Anfang an in der GUI sichtbar? Dann muss ein validate() auf den Container ausgeführt werden und die Methode sollte wohl eher set/showZeitlabel heißen.
Der Aufruf dieser Methode innerhalb der run() scheint wohl auch eher ein verzweifelter Versuch gewesen zu sein - raus damit, hat nichts darin verloren ;-)
 

Michael...

Top Contributor
Ich vermute das liegt daran das dein Task.uhrlabel gar nicht auf dein Panel gesetzt wird. Daher NullPointer
Java:
 contentPane.add(Task.uhrlabel, BorderLayout.SOUTH);

Erst die Komponente dann die Borderkonstante;)
Es funktionieren beide Varianten, sonst liese sich das ja garnicht kompilieren und ausführen und die NPE kommt erst beim Ausführen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Java 8 Security Update Allgemeine Java-Themen 3
krgewb Darstellung bei Java-Update Allgemeine Java-Themen 8
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
B Umgebungsvariable Anpassen der Umgebungsvariablen nach Java-Update ? Allgemeine Java-Themen 14
S Java-Webstart und Update-Checks Allgemeine Java-Themen 0
A Update Software programmieren Allgemeine Java-Themen 1
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
G JavaFX Problem nach Update auf Java 8 Allgemeine Java-Themen 0
E Java 7 update 51 Allgemeine Java-Themen 9
H SHA256 update-Funktion Allgemeine Java-Themen 3
F.S.WhiTeY JDK installieren Linux: Nach Update link auf Java zerschossen Allgemeine Java-Themen 4
eskimo328 Swing Client Anwendung für MAC OS (Update Routine) Allgemeine Java-Themen 6
L Launche update Allgemeine Java-Themen 19
X Update einer Jar während der Laufzeit Allgemeine Java-Themen 8
J Eigenes Produkt Upgrade / Update-fähig halten? Allgemeine Java-Themen 16
S iText PDF - Verständnisproblem beim Update von TableCells (Seitenzahlen) Allgemeine Java-Themen 2
D Updaten von Klassen durch jar.exe zerstört diese. Update durch WinRAR gelingt! Allgemeine Java-Themen 2
T Update eines Programms - Beenden eines anderen Prozesses überwachen Allgemeine Java-Themen 8
D Java Update automatisieren Allgemeine Java-Themen 4
H SQL Update "Rückgabe der DB als String?" Allgemeine Java-Themen 7
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
S eigene Update Funktion Allgemeine Java-Themen 5
martin82 Java Runtime Update >17 - SwingWorker Änderungen? Allgemeine Java-Themen 7
M jdesktop binding: jTable update nach Änderung... Allgemeine Java-Themen 3
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
H Probleme! Mac Os und Java Update Allgemeine Java-Themen 3
R JAR-Update in laufender Applikation Allgemeine Java-Themen 9
A Hilfe mit 2-dimensionalem array ***UPDATE*** Allgemeine Java-Themen 27
Kr0e JCE doFinal/update Allgemeine Java-Themen 2
MQue update/paint Allgemeine Java-Themen 7
L Java6 update N bekommt neues Browser-Plugin, bitte testen. Allgemeine Java-Themen 7
O App Update Allgemeine Java-Themen 3
T NullPointerException nach Java Update Allgemeine Java-Themen 4
V Update des JAR-Archivs Allgemeine Java-Themen 5
M Update auf netbeans 6Beta 1 Allgemeine Java-Themen 2
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
M Tool zum autom. Client-Update Allgemeine Java-Themen 2
C Java SE Runtime 6 Update 1 - IE 7 und FF 2.0 - Allgemeine Java-Themen 6
M Frage zu update Methode von Observer! Allgemeine Java-Themen 40
K Regex Versucher 2 *Update - sinnvoll und schön* :) Allgemeine Java-Themen 6
T update() wird bei Programmstart und resize nicht gemacht Allgemeine Java-Themen 4
R Browser-Problem nach Java-Update Allgemeine Java-Themen 9
B statusbar update -> mit thread oder listener? Allgemeine Java-Themen 7
D wie update-erinnerung der jre deaktivieren? Allgemeine Java-Themen 6
D repaint oder update Methode? Allgemeine Java-Themen 6
M Verständnisfrage java.util.TimerTask Allgemeine Java-Themen 2
B TimerTask Allgemeine Java-Themen 1
L Missbrauch TimerTask? Allgemeine Java-Themen 2
U Timer - Timertask endet nicht Allgemeine Java-Themen 4
T [TimerTask] Pause Allgemeine Java-Themen 5
V Frage zu util.Timer (-> TimerTask) Allgemeine Java-Themen 2
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
A TimerTask - Task stoppen - timer.cancel() funktioniert nicht Allgemeine Java-Themen 8
G Mails aus TimerTask Allgemeine Java-Themen 6
O Timer und TimerTask: Programm terminiert nicht! Allgemeine Java-Themen 3
F Problem mit TimerTask Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben