Einfacher Timer ;)

mr.willow

Mitglied
Hallo JAVAianer ;)

ich wollte mal "schnell" eine Zeitverzögerung einbinden... und :autsch:

Hatte es so versucht:

label.setText("hallo");
Thread.sleep(2000);
label.setText("tschö!");

Problem: er schreibt erst nichts...dann "tschö!". Vermute dass das "sleep" sogar verhindert, dass hallo zuende in das Label transportiert wird :D SCH...!

Jetz twar ich ja schlau *reusper* und habe schon mal gegoogelt. ich muss jetzt nicht irgendw. Klassen definieren um 2 Sekunden zu warten...oder?!?!? :pueh:

Hat jemand ein tolles einfaches Beispiel?? :D

gruß und DANKE !
mr.willow
 

mr.willow

Mitglied
hallo eikeB
DANKE erstmal :)

also ne klasse def. ?!
Java:
public class DelayMessage extends Thread {
    @Override public void run() 
  { 
        try {
            Thread.sleep(3000);
        } catch (InterruptedException ex) {
            Logger.getLogger(DelayMessage.class.getName()).log(Level.SEVERE, null, ex);
        }
}}

und da wo die verzögerung stattfidnen soll

Java:
label.setText("hallo");
Thread delTime = new DelayMessage();
            delTime.start();
label.setText("tschö!");

??? :-/
Weil aus der "DelayMessage" hab ich ja keinen zugriff auf "label"...
 

Plopo

Bekanntes Mitglied
Poste mal deinen ganzen Quellcode.
du musst vermutlich das Label als Klassenvariable/Static deklarieren, damit du darauf "global" zugreifen kannst.
 

mr.willow

Mitglied
hat nicht jemand für das einfache Beispiel eine konkrete Lösung?


Java:
// ..
label.setText("hallo");
Thread.sleep(2000);
label.setText("tschö!");
// ..
 

mr.willow

Mitglied
nochmal danke ;)
aber alles posten ist zu heftig :D
vermutlich ist das doch so kompliziert ...
Schade :( ich bin in anderen Foren bei anderen Themen ganz oben und kann ich immer schnell begreiflich für alle lösen :/
JAVA ist halt nicht mein Gebiet...
Versuche irgendwas zu basteln... :rtfm:
 
G

Gast2

Gast
wenn du in deinem Codestück auf label zugreifen kannst. Dann kannst du auch drauf zugreifen wenn du das in nen Thread packst, evtl. musst du label dann final machen.
Poste doch mal deinen Code mit dem eingebauten Thread.
 

mr.willow

Mitglied
DANKE !!! DAS IST DIE LÖSUNG GESEWEN !!! :lol::applaus:
Java:
label.setText("hallo!");

new Thread(new Runnable() { 
   public void run()
 {
   try {
         Thread.sleep(3000);
         } 
 catch (InterruptedException ex) {
         Logger.getLogger(KundenData.class.getName()).log(Level.SEVERE, null, ex);
         }
         label.setText("tschö!");
  }
 }).start();

ach ja und "label" final (oder static?) ... !
 

ARadauer

Top Contributor
Im Grunde ist das Thema nicht so einfach wie man denken mag.
1. Man ist einer ActionListener Methode die über einen Button Klick ausgelöst wird.
2. Man setzte ein Label
3. Man wartet 3 Sekunden
4. Man setzt noch ein Label

Wichtig für sauberes Arbeiten mit Swing (korregiert mich wenn ich blödsinn schreiben)
A: swing ist nicht threadsave. Das heißt ich soll Gui Komponenten immer nur in einem Thread verändert. Im EDT (event dispatcher thread)
B: So listener Methoden werden im EDT ausgeführt. Wenn hier gewartet wird, blockiert die GUI = schlecht. Also im EDT nie auf die Datenbank gehn oder sleep aufrufen usw...
C: Bin ich nicht im EDT und will GUI Komponenten muss (bzw sollte) ich das im EDT machen. SwingInvoke later...

Das bedeutet du bist im EDT setzt das Label. Möchtest jetzt warten, darfst das aber nicht im EDT machen also neuen Thread. Sind die 3 sekunden vorbei und willst du das zweite Label setzen musst du das i edt machen mit swing invoke later...

Ganz sauber würde es ungefähr so aussehen...

Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Test {

	private JFrame frame;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				Test window = new Test();
				window.frame.setVisible(true);
			}
		});
	}

	public Test() {
		initialize();
	}

	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 200, 100);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		final JLabel label = new JLabel("");
		frame.getContentPane().add(label, BorderLayout.SOUTH);

		JButton btnChange = new JButton("Change");
		btnChange.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// wir sind im EDT
				System.out.println("Im EDT:" + SwingUtilities.isEventDispatchThread());
				label.setText("Warte...");

				new Thread(new Runnable() {

					@Override
					public void run() {
						System.out.println("nicht im EDT:" + SwingUtilities.isEventDispatchThread());
						try {
							Thread.sleep(3000);
						} catch (InterruptedException e) {
						}
						// fertig... gui komponenten nur im edt.
						SwingUtilities.invokeLater(new Runnable() {
							@Override
							public void run() {
								System.out.println("Im EDT:" + SwingUtilities.isEventDispatchThread());
								label.setText("fertig!");
							}
						});

					}
				}).start();
			}
		});
		frame.getContentPane().add(btnChange, BorderLayout.NORTH);
	}

}
pervers... stimmt das so?

Ich habs schon mal gesagt. Und ich sage es wieder... ich halte swing für eine fehlkonstruktion ;-)
 
Zuletzt bearbeitet:
H

hüteüberhüte

Gast
Meiner Auffassung nach kann die geschilderte Situation so nicht eintreten.

GUI-Aktualisierungen sollten innerhalb des EDT geschehen. (1.)
2. blockiert Thread#sleep den aktuellen Thread (der, in dem der Code ausgeführt wird), aber nicht den EDT.
3. sollte es korrekterweise so sein:

Java:
Runnable doHelloWorld = new Runnable() {
    public void run() {
        System.out.println("Hello World on " + Thread.currentThread());
    }
};

SwingUtilities.invokeLater(doHelloWorld);

System.out.println(Thread.currentThread());
Thread.sleep(2000L);

SwingUtilities.invokeLater(doHelloWorld);

SwingUtilities (Java Platform SE 6)

Causes doRun.run() to be executed asynchronously on the AWT event dispatching thread. This will happen after all pending AWT events have been processed. This method should be used when an application thread needs to update the GUI.

try it ;)
 

mr.willow

Mitglied
na da habe ich ja noch ein paar Diskusionen angeregt :D ...
sry ;)
Habe aber ehrlich gesagt nur die Hälfte verstanden :D :D
ok..man kann nicht alles wissen...aber lernen ;)

Gruß und DANKE euch ALLEN !!!

mr.willow
 
V

vanny

Gast
Auch hier sollte mein altes Tut Abhilfe schaffen.
Ist gaanz einfach gehalten ... Klick
die anderen 3 Parts findest ja dann wohl selbst.

Gruß Vanny
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
EinNickname9 Denkfehler bei einfacher Schleife Java Basics - Anfänger-Themen 83
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
N Methoden Einfacher SekundenTimer/Stopuhr in Java Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
H wie mehrere variablen in einfacher for-schleife? Java Basics - Anfänger-Themen 2
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
? Klassen einfacher Fehler in einem Java Programm. Java Basics - Anfänger-Themen 5
V Einfacher vergleich von Arrays geht schief Java Basics - Anfänger-Themen 2
K Seltsames Ergebnis in Netbeans bei einfacher Multiplikation Java Basics - Anfänger-Themen 5
O Ein einfacher Chatbot (simuliert chat) Java Basics - Anfänger-Themen 7
R Einfacher Regex Java Basics - Anfänger-Themen 3
L Einfacher Methodenaufruf vs. Objekt Java Basics - Anfänger-Themen 4
K Einfacher random namen weitergeben Java Basics - Anfänger-Themen 4
A Lässt sich dieser Ausdruck irgendwie einfacher schreiben? Java Basics - Anfänger-Themen 4
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
P Geht dieser Code noch einfacher? Java Basics - Anfänger-Themen 16
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
P falsches ergebnis bei einfacher berechnung Java Basics - Anfänger-Themen 3
M Einfacher Fenster-Ablauf Java Basics - Anfänger-Themen 5
M Gittermuster mit Stringbuilder und einfacher Schleife erstellen Java Basics - Anfänger-Themen 19
T Collections Werte aus einer HashMap auslesen, oder gehts auch einfacher ? Java Basics - Anfänger-Themen 6
D Code einfacher,eleganter programmieren Java Basics - Anfänger-Themen 24
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
C einfacher Link zu *.html Datei möglich? Java Basics - Anfänger-Themen 4
Hindi93 Einfacher Code funktioniert nicht... Java Basics - Anfänger-Themen 6
P Einfacher Rechner Java Basics - Anfänger-Themen 2
T Einfacher Kalender Java Basics - Anfänger-Themen 17
B Frage zu einfacher Rechnung Java Basics - Anfänger-Themen 3
B Hilfe bei einfacher Funktion - Possible loss of precision Java Basics - Anfänger-Themen 2
G Einfacher Anfang mit Hibernate Java Basics - Anfänger-Themen 4
M ein einfacher button.. ich verzweifel...... Java Basics - Anfänger-Themen 41
F Von int zu double bei einfacher Rechnung Java Basics - Anfänger-Themen 2
C Einfacher Installer Java Basics - Anfänger-Themen 2
Chucky Einfacher Taschenrechner Verbesserungsvorschläge Java Basics - Anfänger-Themen 13
G Problem mit einfacher For-Schleife und Double Wert Java Basics - Anfänger-Themen 4
D Probleme bei einfacher Rechnung Java Basics - Anfänger-Themen 3
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
C Timer aktualisieren Java Basics - Anfänger-Themen 5
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
missy72 Timer oder Timeline Java Basics - Anfänger-Themen 3
R Timer Format: 00:00:00 Java Basics - Anfänger-Themen 29
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
D Änder der Timer Speeds Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
L Methoden Timer Java Basics - Anfänger-Themen 9
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
S Timer reseten Java Basics - Anfänger-Themen 3
T Timer stoppt zu früh Java Basics - Anfänger-Themen 7
CptK Methoden Timer & Mathematischer Denkfehler Java Basics - Anfänger-Themen 7
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
D Timer programmieren Java Basics - Anfänger-Themen 13
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
J Timer richtig pausieren Java Basics - Anfänger-Themen 2
E Timer erstellen Java Basics - Anfänger-Themen 2
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
S actionlistener timer Java Basics - Anfänger-Themen 9
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
S timer mit imagedatei Java Basics - Anfänger-Themen 5
S timer Java Basics - Anfänger-Themen 0
V Java Uitil Timer Stoppt nicht Java Basics - Anfänger-Themen 2
KaffeeFan Timer beenden Java Basics - Anfänger-Themen 12
K Ampelsteuerung mit Timer Java Basics - Anfänger-Themen 8
F Array und Timer Java Basics - Anfänger-Themen 2
G Timer einsetzen Java Basics - Anfänger-Themen 2
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
F Timer beendet nicht immer Java Basics - Anfänger-Themen 2
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
T Timer - HILFE Java Basics - Anfänger-Themen 10
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Schneller Timer Java Basics - Anfänger-Themen 2
C Timer aus anderer Klasse stoppen/starten Java Basics - Anfänger-Themen 3
B Timer beenden? Java Basics - Anfänger-Themen 0
G Erste Schritte Timer: In einem festgelegten Intervall eine Methode ausführen Java Basics - Anfänger-Themen 6
O Delayed Timer erstellen Java Basics - Anfänger-Themen 3
M Timer / Thread Java Basics - Anfänger-Themen 43
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
J Swing Timer Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben