Countdown abbrechen und neustarten können

Davren2007

Grünschnabel
Hallo zusammen!
Ich bin kurz vorm verzweifeln. Ich versuche, eine Countdown - Methode für mein Programm zu schreiben, die 10 Sekunden läuft, sich aber durch einen Knopf abbrechen lässt und dann wieder von neuen startet...

Ich glaub, ich geh das Problem falsch an, aber hier ist trotzdem ein Ausschnitt von meinem Programm:

Code:
public class Timer01 {


    private boolean pause;

    private int cnt = 10;

    private Thread runner = new Thread() {
        public void run() {
            while (true) {
            	System.out.println("while:" +pause);
                if (pause == false) {

                    System.out.println(cnt);
                    cnt--;

                    if (cnt < 0) {
                        fertig();
                        break;
                    }

                    try {
                        sleep(1000L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    try {
                        sleep(100L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    };

    public Timer01(boolean pause) {
    	this.pause = pause;
        runner.start();
    }

    private void fertig() {
        System.out.println("fertig");
    }
    


    public static void Timer00(boolean paus) {
    	System.out.println(paus);
        new Timer01(paus);
    }
}
 
Hallo,

schau mal hier:
(Zum Pausieren des Countdowns...)
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

/**
 * @author Thomas.Darimont
 * 
 */
public class CountdownExample extends JFrame {

    JTextField txtCountdown;
    JButton btnContdown;

    boolean isStopped;

    Lock lock = new ReentrantLock();

    public CountdownExample() {
        super("CountdownExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        txtCountdown = new JTextField(10);
        btnContdown = new JButton("Action");

        btnContdown.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (isStopped) {
                    lock.unlock();
                } else {
                    lock.lock();
                }
                isStopped = !isStopped;
            }
        });

        add(txtCountdown, BorderLayout.WEST);
        add(btnContdown, BorderLayout.EAST);

        pack();
        setVisible(true);

        Executors.newSingleThreadExecutor().execute(new Runnable() {

            public void run() {
                for (int i = 100; i >= 0; i--) {

                    lock.lock();

                    txtCountdown.setText("" + i);

                    lock.unlock();

                    try {
                        TimeUnit.MILLISECONDS.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

        });
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new CountdownExample();
    }

}

//Edit... okay man sollte die Aufgaben Beschreibung immer erst genau lesen...:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

/**
 * @author Thomas.Darimont
 * 
 */
public class CountdownExample extends JFrame {

	JTextField txtCountdown;
	JButton btnContdown;
	volatile int currentCountdownValue = 100;

	public CountdownExample() {
		super("CountdownExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		txtCountdown = new JTextField(10);
		btnContdown = new JButton("Action");

		btnContdown.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentCountdownValue = 100;
			}
		});

		add(txtCountdown, BorderLayout.WEST);
		add(btnContdown, BorderLayout.EAST);

		pack();
		setVisible(true);

		Executors.newSingleThreadExecutor().execute(new Runnable() {

			public void run() {

				while (currentCountdownValue >= 0) {
					txtCountdown.setText("" + currentCountdownValue);
					try {
						TimeUnit.MILLISECONDS.sleep(500);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					currentCountdownValue--;
				}
			}

		});
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new CountdownExample();
	}

}

Gruß Tom
 
Danke für die rasche Antwort, aber ist leider immer noch nicht, wie ich mir das vorstelle... Der Countdown sollte nach dem Knopf wieder bei 100 beginnen. Ist das irgendwie möglich?
 
Zurück