Countdown

Status
Nicht offen für weitere Antworten.

H2SO4

Bekanntes Mitglied
Hi!

Natürlich habe ich zu meinem Prob die Suche bemüht, aber nirgends stand das:

Ich brauche einen Countdown, der 2, 3, 4 oder 5 Minuten runterzählt, irgendwie dargestellt werden kann und vor allem muss er anhaltbar und an der Stelle wieder startbar sein.

Wie mache ich das?
 

faetzminator

Gesperrter Benutzer
Soll es ein Konsolenprogramm sein? oder ein GUI haben? Was ist die Schnittstelle
Wie soll der Input aussehen? Wie der Output?
 

H2SO4

Bekanntes Mitglied
Also:

Ich habe mir überlegt, der Klasse die Komponente zu übergeben, zb ein JLabel und das dann immer zuupdaten.

Input: Countdownlänge.
Outpunt: eine runterlaufende Uhrzeit =) 5:00...4:59...4:58.....

mit der Möglichkeit die Uhr anzuhalten und weiter laufen zulassen, was das Hauptproblem darstellt =).
 

faetzminator

Gesperrter Benutzer
du hast eine Variable, in welcher die geplante Zeit 0 erreicht. wenn du dann diese von der aktuellen Zeit abziehst, kannst du den Restwert anzeigen. Wenn gestoppt wird, kannst du wieder die Differenz speichern. Beim erneuten Start einfach wieder umrechnen. -> Warum das ganze mit dem Umrechnen? Falls irgendwas ungenau läuft (wer weiss, wie genau Thread.sleep() ist...) hast du immer eine Systemzeit und keine Differenz
 

Ark

Top Contributor
Bist du Anfänger, was Java betrifft? Dann hast du deine Messlatte bereits zu hoch angesetzt. Dieses Thema bedarf der Kenntnisse im Umgang mit Threads, insbesondere muss die Arbeitsweise des EDTs bekannt sein, der in GUIs eine zentrale Rolle spielt.

Wenn diese Techniken aber bekannt sind, sollte sich dein Problem in Luft auflösen.

Ark
 

faetzminator

Gesperrter Benutzer
@Ark: er sagt, es sei ein mathematisches Problem, und da helfe ich

@H2SO4: etwa so ist das (sollte etwa so laufen):

Java:
public class Timer {
    private long time;
    private boolean isStarted;
    public Timer(long time) {
        this.time = time;
    }
    public boolean isStarted() {
        return this.isStarted;
    }
    public void start() {
        if (!this.isStarted) {
            this.isStarted = true;
            this.time += System.currentTimeMillis();
        }
    }
    public void stop() {
        if (this.isStarted) {
            this.isStarted = false;
            this.time -= System.currentTimeMillis();
        }
    }
    public long getTime() {
        return this.time;
    }
}
nun musst du immer nur getTime() formatieren, dies von einem Thread aus (in einem Abstand von 50ms oder ähnlich)
 

hdi

Top Contributor
Bitteschön:

Java:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class CountDown extends Thread {

	private boolean alive;
	private boolean running;
	private long tMinus;
	private JLabel label;

	/**
	 * Creates a new Thread that counts down and updates a JLabel's text
	 * with the remaining time every second.
	 * 
	 * @param label
	 *            the JLabel to update
	 * @param tMinus
	 *            the time limit
	 */
	public CountDown(JLabel label, long tMinus) {
		alive = true;
		running = true;
		this.tMinus = tMinus;
		this.label = label;
	}

	public void toggle() {
		running = !running;
	}

	public void kill() {
                running = false;
		alive = false;
	}

	@Override
	public void run() {
		while (alive) {
			while (running) {
				SwingUtilities.invokeLater(new Runnable() {
					@Override
					public void run() {
						label.setText(tMinus + " second(s) remaining.");
					}
				});
				tMinus--;
				if (tMinus == 0) {
					this.kill();
				} else {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
					}
				}
			}
		}
	}

	
	/**
	 * 
	 * USAGE EXAMPLE
	 * 
	 * */
	public static void main(String[] args) {
		
		// Frame with label
		JFrame f = new JFrame();
		JLabel l = new JLabel();
		l.setPreferredSize(new Dimension(200, 20));

		// count down with label and 30 second timer
		final CountDown cd = new CountDown(l, 30);
		
		// button to pause / continue count down
		JButton b = new JButton("toggle");
		b.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				cd.toggle();
			}
		});

		// add components, show frame and start count down
		f.setLayout(new FlowLayout());
		f.add(l);
		f.add(b);
		f.pack();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		cd.start();
	}
}

Wenn du etwas nicht verstehst, frag nach! Einfach nur copy & paste ist n Schuss in den eigenen Fuß.
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
hab jetzt schon länger nix mehr mit swing gemacht....

Java:
    SwingUtilities.invokeLater(new Runnable() {
soll verwendet werden, wenn die gui verändert wird, ich aber nicht im edt bin oder?
 

Ebenius

Top Contributor
Bitte für sowas keine eigenen Timer bauen und auch keine Threads starten. Es genügt bereits ein javax.swing.Timer, die actionPerformed(...)-Methode wird immer synchron zum EDT ausgeführt (damit ist auch kein invokeLater(...) mehr nötig) und alles läuft so leichtgewichtig wie möglich. Einfaches Anwendungsbeispiel (ohne Bezug auf den Count-Down):
Java:
new javax.swing.Timer(1000, new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    label.setText(DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()));
  }
}).start();
Vertrau nicht dem automatisch erzeugten Verweis zu Timer im Quelltext! Der führt Dich zum java.util.Timer.
Ebenius
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
S Stunden/Tage Countdown Java Basics - Anfänger-Themen 9
T Countdown erstellen Java Basics - Anfänger-Themen 7
T Countdown funktioniert nicht Java Basics - Anfänger-Themen 5
W Threads 1h 20min Countdown Java Basics - Anfänger-Themen 5
J Countdown Java Basics - Anfänger-Themen 3
D Erste Schritte Countdown mehrfach verwenden Java Basics - Anfänger-Themen 5
F countdown Java Basics - Anfänger-Themen 5
G Countdown von Heute bis Zieldatum Java Basics - Anfänger-Themen 4
N Countdown Java Basics - Anfänger-Themen 4
W Countdown auf "schwarze Blöcke" Java Basics - Anfänger-Themen 3
F Countdown und dann Aktion Java Basics - Anfänger-Themen 4
S Countdown 5min bis 0sek Java Java Basics - Anfänger-Themen 10
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
D Countdown Funktion aus SQl Datenbank Java Basics - Anfänger-Themen 21
N countdown zähl problem Java Basics - Anfänger-Themen 5
O Countdown mit Erhöhung Java Basics - Anfänger-Themen 2
T Countdown, der in der selben Zeile bleibt Java Basics - Anfänger-Themen 6
D Timer bzw. Countdown Java Basics - Anfänger-Themen 3
T countdown Methode mit Timer Java Basics - Anfänger-Themen 2
F Countdown Probleme Java Basics - Anfänger-Themen 9
R Countdown erstellen Java Basics - Anfänger-Themen 3
S Countdown auf JPanel ausgeben Java Basics - Anfänger-Themen 6
M Countdown in Java Java Basics - Anfänger-Themen 16
B Countdown zwischen 2 Zeitpunkten Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben