我正在尝试在一个类中使用一个函数,该函数将启动和停止使用布尔值链接到 int 值的计时器。因此,例如,如果我启动了一个 int 为 0 的计时器,那么它就是 timer0,如果它是 3,那么就是 timer3,依此类推。
我遇到的问题是计时器似乎启动正常,但是当我向他们发送一个错误的布尔值来停止它们时,它们会继续运行,所以我需要知道如何正确停止它们。
在 Class.java 中的代码是:
public void Event(final int value, boolean run, int time){
if(run){
System.out.println(run);
Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run() {
// The needed code will go here
System.out.println(value + " Event run");
}
}, 0, time); // Every second
} else {
}
}
然后对于我的 Main.java 代码是:
System.out.println("Start Timer 0 Event");
r.Event(0, true, 1000);
System.out.println("Start Timer 1 Event");
r.Event(1, true, 250);
System.out.println("Start Timer 2 Event");
r.Event(2, true, 250);
r.Event(0, false, 1000); // Not Working as i need
System.out.println("Stop Timer 0 Event");
基本上我只想让一组事件在每设定的时间内重复一次,直到我停止它们,并且可能有很多一起运行。如果计时器不是执行此操作的最佳方式,那么替代方案会很好,但它需要以与描述相同的方式工作。
根据要求,这里是我的计时器的可运行代码。
MyClass.java:
package com.z;
import java.awt.*;
import java.util.*;
import java.util.TimerTask;
public class MyClass {
////////////////////////////////////////////////////////////
//Name: Event (BROKEN)
////////////////////////////////////////////////////////////
public void Event(final int value, boolean run, int time){
Timer timer = new Timer("" + value, true);
if(run){
System.out.println(run);
timer.schedule( new TimerTask() {
public void run() {
// Code here
System.out.println(value + " Event run");
}
}, 0, time); // Every second
}
if (!run) {
timer.cancel();
}
}
}
例子.java:
package com.z;
import java.awt.*;
import java.awt.event.*;
public class Example {
public static void main(String[] args) {
MyClass r = new MyClass();
////////////////////////////////////////////////////////////
// Event (BROKEN)
////////////////////////////////////////////////////////////
System.out.println("Start Timer 0 Event");
r.Event(0, true, 1000);
System.out.println("Start Timer 1 Event");
r.Event(1, true, 250);
r.Event(0, false, 1000);
System.out.println("Stop Timer 0 Event");
}
}