Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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_Timer - Fatal编程技术网

如何在java中停止计时器

如何在java中停止计时器,java,timer,Java,Timer,我有一个计时器方法,每次用户输入东西时都会运行。基本上,用户有一分钟的时间输入某些内容,或者计时器将打印响应,但如果用户在计时器超时之前输入某些内容,则不会打印响应。基本上,我很难取消最后一个计时器并调用一个新的计时器,因为如果我不取消计时器,前一个计时器会一直运行,而新的计时器会一直被调用,所以会造成很大的混乱。我的方法如下 主要内容: 跑步者: public static void runner() { timer(); String s = input.nextLine

我有一个计时器方法,每次用户输入东西时都会运行。基本上,用户有一分钟的时间输入某些内容,或者计时器将打印响应,但如果用户在计时器超时之前输入某些内容,则不会打印响应。基本上,我很难取消最后一个计时器并调用一个新的计时器,因为如果我不取消计时器,前一个计时器会一直运行,而新的计时器会一直被调用,所以会造成很大的混乱。我的方法如下

主要内容:

跑步者:

public static void runner() {
     timer();
     String s = input.nextLine();
     System.out.println(s);

}
计时器:

public static void timer() {
     TimerTask task = new TimerTask() {
           public void run() {
                System.out.println("Say something already!");
           }
    };
    long delay = TimeUnit.MINUTES.toMillis(1);
    Timer t = new Timer();
    t.schedule(task, delay);
}
我怎样才能取消这次旅行呢。有人要我在TimerTask类中使用cancel()方法,但我不知道在哪里调用,甚至不知道如何调用。

让timer()方法返回TimerTask对象,当input.nextLine()返回时,调用TimerTask.cancel()

也可以返回计时器,并调用Timer.cancel()

让Timer()方法返回TimerTask对象,当input.nextLine()返回时,调用TimerTask.cancel()


也可以返回计时器并调用Timer.cancel()

我想这可能会起作用:

Main:

TimerTask task;

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    runner();

    while(true) {

        timer(); //run timer
        String line = scan.nextLine(); //read line (happens after hit Enter)
        System.out.println(line);
        //if line is read, then rerun timer which has on next iteration
    }

}

Timer:

public static void timer() {

    if(null != task) {
        task.cancel();
    }

    task = new TimerTask() {
           public void run() {
                System.out.println("Say something already!");
                //timer(); reinit maybe after 1 min again?
           }
    };

    long delay = TimeUnit.MINUTES.toMillis(1);
    Timer t = new Timer();
    t.schedule(task, delay);
}

我想这是可行的:

Main:

TimerTask task;

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    runner();

    while(true) {

        timer(); //run timer
        String line = scan.nextLine(); //read line (happens after hit Enter)
        System.out.println(line);
        //if line is read, then rerun timer which has on next iteration
    }

}

Timer:

public static void timer() {

    if(null != task) {
        task.cancel();
    }

    task = new TimerTask() {
           public void run() {
                System.out.println("Say something already!");
                //timer(); reinit maybe after 1 min again?
           }
    };

    long delay = TimeUnit.MINUTES.toMillis(1);
    Timer t = new Timer();
    t.schedule(task, delay);
}

由于返回了一些内容,这不意味着我们不能使用void for timer()方法吗。那么,什么应该放在适当的位置而不是空的位置呢?是的,输入错误。timer的返回类型应为TimerTask(或timer),具体取决于返回的对象。由于返回了某些内容,这不意味着我们不能使用void for timer()方法。那么,什么应该放在适当的位置而不是空的位置呢?是的,输入错误。计时器的返回类型应为TimerTask(或timer),具体取决于返回的对象。
Main:

TimerTask task;

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    runner();

    while(true) {

        timer(); //run timer
        String line = scan.nextLine(); //read line (happens after hit Enter)
        System.out.println(line);
        //if line is read, then rerun timer which has on next iteration
    }

}

Timer:

public static void timer() {

    if(null != task) {
        task.cancel();
    }

    task = new TimerTask() {
           public void run() {
                System.out.println("Say something already!");
                //timer(); reinit maybe after 1 min again?
           }
    };

    long delay = TimeUnit.MINUTES.toMillis(1);
    Timer t = new Timer();
    t.schedule(task, delay);
}