使用Timer类时schedule()/cancel()方法未定义的原因排查
问题原因及解决办法
核心原因:类名冲突
你自定义了名为Timer的类,和JDK自带的java.util.Timer重名了。代码里new Timer()实例化的是你自己的类,而这个自定义类并没有实现schedule()和cancel()方法,所以编译器报错。两种修复方式
- 修改自定义类名:把你的类改成其他名称,比如
MyTimer,这样代码里的Timer会自动指向java.util.Timer,方法调用就正常了。 - 使用全限定类名:如果不想改类名,在实例化时明确指定JDK的
Timer类,比如:
这样就能确保引用的是正确的类,调用它的方法不会报错。public static java.util.Timer timer = new java.util.Timer();
- 修改自定义类名:把你的类改成其他名称,比如
修复后的示例代码(修改类名方式)
import java.util.*; public class MyTimer{ public static Timer timer = new Timer(); public static void main(String[] args){ TimerTask task = new TimerTask() { @Override public void run(){ System.out.println("Task is on"); timer.cancel(); } }; long delay = 1000; timer.schedule(task,delay); } }
内容的提问来源于stack exchange,提问作者Tim Matthew
相关产品推荐
相关产品推荐

