用一个 Timer 处理多个 TimerTasks
Handling multiple TimerTasks with one Timer
有了一个 TimerTask
,一切看起来都非常简单并且工作正常。
但是我不能在一个定时器内处理不同的'TimerTasks'。
我尝试将 TimerTask 对象添加到构造函数中,但是当我将新的 TimerTask (RemindTask1) 对象作为参数(内部 class 的实例)传递时出现编译错误。
以下是它如何处理一项任务:
public class MyTimer {
Timer timer;
public MyTimer(long time) {
timer = new Timer();
timer.schedule(new RemindTask(), time);
}
class RemindTask extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
public static void main(String[] args) {
/// ...
MyTimer myTimer = new MyTimer(5000);
/// ...
}
}
但我完全不知道应该如何创建多个任务,然后 运行。
public class MyTimer {
Timer timer;
public MyTimer(TimerTask tt, long time) {
timer = new Timer();
timer.schedule(tt, time);
}
class RemindTask1 extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
class RemindTask2 extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
public static void main(String[] args) {
/// ...
MyTimer myTimer = new MyTimer(new RemindTask2(), 5000);
/// ...
}
}
但这不起作用,我不知道哪里出了问题。
当我将 new RemindTask2() 作为参数传递时出现编译错误。
我假设 "not working" 你的意思是编译器不允许你从静态上下文(main
方法)创建内部 class RemindTask2
的实例.
一般有两种处理方式。
- 请
MyTimer
实例为您创建其内部 class 实例。这实际上不是你的选择,因为你需要内部 class 实例存在 before 你构造 MyTimer
.
MyTimer myTimer;
// initialize myTimer
TimerTask task = myTimer.new RemindTask2();
- 通过添加
static
关键字将内部 classes 更改为嵌套 classes。这是您的选择。
static class RemindTask2 extends TimerTask {
//...
}
有了一个 TimerTask
,一切看起来都非常简单并且工作正常。
但是我不能在一个定时器内处理不同的'TimerTasks'。
我尝试将 TimerTask 对象添加到构造函数中,但是当我将新的 TimerTask (RemindTask1) 对象作为参数(内部 class 的实例)传递时出现编译错误。
以下是它如何处理一项任务:
public class MyTimer {
Timer timer;
public MyTimer(long time) {
timer = new Timer();
timer.schedule(new RemindTask(), time);
}
class RemindTask extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
public static void main(String[] args) {
/// ...
MyTimer myTimer = new MyTimer(5000);
/// ...
}
}
但我完全不知道应该如何创建多个任务,然后 运行。
public class MyTimer {
Timer timer;
public MyTimer(TimerTask tt, long time) {
timer = new Timer();
timer.schedule(tt, time);
}
class RemindTask1 extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
class RemindTask2 extends TimerTask {
@Override
public void run() {
/// ...
timer.cancel();
}
}
public static void main(String[] args) {
/// ...
MyTimer myTimer = new MyTimer(new RemindTask2(), 5000);
/// ...
}
}
但这不起作用,我不知道哪里出了问题。 当我将 new RemindTask2() 作为参数传递时出现编译错误。
我假设 "not working" 你的意思是编译器不允许你从静态上下文(main
方法)创建内部 class RemindTask2
的实例.
一般有两种处理方式。
- 请
MyTimer
实例为您创建其内部 class 实例。这实际上不是你的选择,因为你需要内部 class 实例存在 before 你构造MyTimer
.
MyTimer myTimer;
// initialize myTimer
TimerTask task = myTimer.new RemindTask2();
- 通过添加
static
关键字将内部 classes 更改为嵌套 classes。这是您的选择。
static class RemindTask2 extends TimerTask {
//...
}