您的位置:首页 > 编程语言 > Java开发

关于Timer计时器控件的java.lang.IllegalStateException: TimerTask is scheduled already问题分析

2017-05-02 11:42 513 查看
博主最近在改被人的项目,准备写一个类似今日头条的加载完成提示,就写了个计时器让它显示几秒,于是就用到了timer这个计时器控件,简单的正常代码如下,因为博主的加载需要多次,当timer二次调用的时候就出现了java.lang.IllegalStateException: TimerTask is scheduled already异常,于是苦恼了老半天,不知道为什么,每次刷新的时候我哦重新给timer 创建新对象或者cancel()都还是报这个异常,正常的timer代码如下

Timer timer = new Timer();
private int tips_time= 20;

public void tipsStart() {

timer .schedule(taskTips, 1000, 1000); // timeTask
}

final Handler handlerTips = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (tips_time < 0) {
timerTipS.cancel();
}
}
}
};
TimerTask taskTips = new TimerTask() {
@Override
public void run() {
tips_time--;
Message message = new Message();
message.what = 1;
handlerTips.sendMessage(message);
}
};

然后楼主翻阅了很多资料才发现,只要timer这个控件第二次调用就会出现出现这个异常,解决办法如下,自定义一个类集成TimerTask即可
class RequestTimerTask extends TimerTask {
public void run() {
tips_time--;
Message message = new Message();
message.what = 1;
handlerTips.sendMessage(message);
}
}然后把
timer .schedule(taskTips, 1000, 1000);
中的taskTips改成  new RequestTimerTask();即可,完美解决!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐