java - java中如何停止定时器

标签 java timer

我有一个计时器方法,每次用户输入内容时都会运行。基本上,用户有一分钟的时间来输入某些内容,否则计时器将打印响应,但如果用户在计时器超时之前输入某些内容,则不会打印响应。基本上,我在取消最后一个计时器并调用一个新计时器时遇到了麻烦,因为如果我不取消计时器,前一个计时器会继续运行,而新计时器会不断被调用,所以它只会造成一团糟。我的方法如下

主要:

public static void main(String[] args) {
     while(true) {
          runner();
     }
}

运行者:

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()。

public static void runner() {
     TimerTask t = timer();
     String s = input.nextLine();
     t.cancel();
     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);
    return task;
}

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

关于java - java中如何停止定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745858/

相关文章:

java - 带有自定义编辑器的 SWT 表在调整大小时变得困惑

java - 没有 AWT 的 Swing GUI 监听器

java - 如何在 java 中以周期性间隔执行操作?

javascript - 如果再次调用函数,则取消超时/计时器 --- debounce 函数

java - JLabel 不随计时器更新

java - 如何修复声音?

java - 如果使用 DWR 和 java 而不是 AJAX 和 PHP,我们必须在 JqGrid 中进行哪些更改?

java - 如何解决应用程序中的 Java JLabel 问题?

java - Spring JavaConfig : Add mapping for custom Servlet

c - 指示哪个线程设置计时器处理程序?