Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用java制作倒计时计时器(秒表java)_Java_Countdowntimer_Stopwatch - Fatal编程技术网

如何用java制作倒计时计时器(秒表java)

如何用java制作倒计时计时器(秒表java),java,countdowntimer,stopwatch,Java,Countdowntimer,Stopwatch,我有一个问题,当我运行它不停止计数 那么,当计数器达到0时,如何使其停止?您需要指示计时器在最后一次迭代时停止;比如: package test; import java.util.Scanner; import java.util.Timer; import java.util.TimerTask; public class StopWatch { public static int interval; public static void main(String[]

我有一个问题,当我运行它不停止计数


那么,当计数器达到0时,如何使其停止?

您需要指示计时器在最后一次迭代时停止;比如:

package test;

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

public class StopWatch 
{
    public static int interval;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Input seconds => : ");
        interval = input.nextInt();
        int delay = 1000;
        int period = 1000;
        Timer time = new Timer();
        System.out.println(interval);
        time.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                if (interval == 0) {
                    System.out.println("work finished");
                } else {
                    System.out.println(setInterval());
                }
            }
        }, delay, period);
    }

    private static int setInterval() {          
        return --interval;
    }    
}
有关更多详细信息,请参阅。您可能不需要在此处调用
purge()
,因为只有一个线程处理该计时器;但在更“通用”的用例中,它是必需的

你可能必须改变

public void run() {
   if (interval == 0) {
     System.out.println("work finished");
     time.cancel();
     time.purge();


(取决于您的Java版本)来告诉编译器,保存后可以从该匿名内部类中访问外部局部变量。

这里有一个解决问题的快速方法。您必须调用方法cancel(),如下所示:

final Timer time = new Timer();
package com.test;

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

public class StopWatch 
{
    public static int interval;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Input seconds => : ");
        interval = input.nextInt();
        int delay = 1000;
        int period = 1000;
        final Timer time = new Timer();
        System.out.println(interval);
        time.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                if (interval == 0) {
                    System.out.println("work finished");
                    time.cancel();
                    time.purge();
                } else {
                    System.out.println(setInterval());
                }
            }
        }, delay, period);
    }

    private static int setInterval() {

        return --interval;
    }

}

多米尼克·尤伯斯菲尔德(Dominique Ubersfeld)

提示:答案只是向读者扔代码。。。这不是很有帮助。既不适合你(很少被高估),也不适合读者;因为没有任何解释。你知道,我写了三行字;并将它们放入原始源代码中。。。并不能完全弥补这一点。提示:把已经存在的两个答案放在一起。。。没有提供任何进一步的见解或“附加值”。。。不会给你带来更多的选票。
package com.test;

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

public class StopWatch 
{
    public static int interval;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Input seconds => : ");
        interval = input.nextInt();
        int delay = 1000;
        int period = 1000;
        final Timer time = new Timer();
        System.out.println(interval);
        time.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                if (interval == 0) {
                    System.out.println("work finished");
                    time.cancel();
                    time.purge();
                } else {
                    System.out.println(setInterval());
                }
            }
        }, delay, period);
    }

    private static int setInterval() {

        return --interval;
    }

}
public static int interval;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Input seconds => : ");
        interval = input.nextInt();
        int delay = 1000;
        int period = 1000;
        Timer time = new Timer();
        System.out.println(interval);
        time.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                if (interval == 0) {
                    System.out.println("work finished");
                    time.cancel();
                } else {
                    System.out.println(setInterval());
                }
            }
        }, delay, period);
    }

    private static int setInterval() {

        return --interval;
    }

}