Java Timer.schedule参数不匹配报错求助:soccer无法转为TimerTask
解决Timer.schedule()参数不匹配的问题
这个问题其实是Java定时器API的基础使用误区,我来一步步帮你搞定~
错误原因解析
你看到的error: no suitable method found for schedule(soccer,int)本质是类型不兼容:
Java的Timer.schedule()方法要求第一个参数必须是TimerTask(或其子类)的实例,但你传入的是自定义的soccer类对象,这两个类型没有继承/实现关系,编译器自然会报错。
两种可行的解决方法
方法1:让soccer类继承TimerTask(最直接)
TimerTask是一个抽象类,专门用来定义定时器要执行的任务逻辑。你只需要让你的soccer类继承它,并重写run()方法(这是定时器触发后会执行的代码):
import java.util.TimerTask; // 让soccer继承TimerTask public class soccer extends TimerTask { // 重写run方法,写你的任务逻辑 @Override public void run() { // 比如这里写你原本想让soccer执行的操作 System.out.println("足球任务开始执行!"); } }
然后在调用schedule()的时候,就可以正常传入soccer实例了:
import java.util.Timer; public class Balls { private static int time = 1; public static void main(String[] args){ int a=0,b=0,c=0,d=0,e=0; // 初始化定时器和任务 Timer timer = new Timer(); soccer soccerTask = new soccer(); // 第一个参数是任务实例,第二个是延迟执行的毫秒数(比如1000=1秒) timer.schedule(soccerTask, 1000); } }
方法2:如果soccer已经继承了其他类(Java单继承限制)
如果你的soccer类已经继承了别的类(Java不支持多继承),可以让它实现Runnable接口,再把它包装成TimerTask:
// 让soccer实现Runnable public class soccer implements Runnable { @Override public void run() { System.out.println("足球任务开始执行!"); } }
然后在调用时用匿名内部类包装:
Timer timer = new Timer(); soccer soccerRunnable = new soccer(); // 把Runnable包装成TimerTask TimerTask task = new TimerTask() { @Override public void run() { soccerRunnable.run(); } }; timer.schedule(task, 1000);
额外小提醒
- 第二个参数如果是
int类型,编译器会自动转成long,对应延迟执行的毫秒数;如果你想让任务在指定时间执行,传Date对象即可。 - 使用完Timer后记得调用
timer.cancel()来释放资源,避免内存泄漏。
内容的提问来源于stack exchange,提问作者I Read Anime
相关产品推荐
相关产品推荐

