-->

Creating a count down timer- Java

2020-02-16 02:25发布

问题:

    Timer timer = new Timer();

    TimerTask task = new TimerTask(){
        public void run(){
            for (int i = 0; i <= 30; i++){
                lblTimer.setText("" + i);
            }
        }
    };
    timer.scheduleAtFixedRate(task, 0, 1000); //1000ms = 1sec

I have created a timer that starts when I press a button and above is the code that run. Can anyone help me create a timer that counts to 30? Right now when I run it, sets the text "30" in the label but I want it to start at 0 and count until 30.

回答1:

Each time your timer runs, it performs the loop from 0 to 30, thus the UI is refreshed only when the loop ends. You need to keep your i in a member and update it each time the run method is called as such:

    Timer timer = new Timer();

    TimerTask task = new TimerTask(){
        private int i = 0;
        public void run(){
            if (i <= 30) {
                lblTimer.setText("" + i++);
            }
        }
    };
    timer.scheduleAtFixedRate(task, 0, 1000); //1000ms = 1sec

Of course once your reach i = 30, you should cancel your times, otherwise it'll still run every second but with no real effect or need.



回答2:

The problem is, that every time the TimerTask gets executed, you directly count to 30. So it will count to 30 each time. What you wanna do is to have the i variable where the current time is stored outside of the TimerTask and just increment it by 1 each time the TimerTask gets executed.

This would look like this:

TimerTask task = new TimerTask(){

    // initially set currentTime to 0
    int currentTime = 0;

    public void run(){

        // only increment if currentTime is not yet 30, you could also stop the timer when 30 is reached
        if (currentTime < 30) {

            // increment currentTime by 1 and update the label
            currentTime++;
            lblTimer.setText("" + i);
        }
    }
};