【求教】timer怎么停止啊????

jiange1310 2012-05-05 11:39:07
我在JSP中设置两个按钮,一个是触发timer(参数fun=1),一个是停止timer(参数fun=0),然后点击链接到Myclock.java这个servlet上,并传递参数fun
在Myclock.java中,判断fun=?;若为1,则执行timer.schedule(...);若为0,则执行timer.cancel();可是每次开启timer后,就无法关闭
请各位大侠帮忙解答一下呗~谢过先!

以下是我的代码。

1.JSP:

。。。
<a href="Myclock?fun=1">触发timer</a>
<a href="Myclock?fun=0">关闭timer</a>
。。。

2.web.xml

<servlet>
<servlet-name>Myclock</servlet-name>
<servlet-class>com.Myclock</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Myclock</servlet-name>
<url-pattern>/Myclock</url-pattern>
</servlet-mapping>

3. Myclock.java

public class Myclock extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{

String fun = request.getParameter("fun");

Timer timer=new Timer();
Date date=null;
DateFormat df=new SimpleDateFormat("yyyyMMddHHmmss");
String str="19800101000000";
try {
date=df.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(fun.equals("1")){
System.out.println("===========fun等于1========");
timer.schedule(new MyTask(),date,3000L);
}else{
System.out.println("===========fun等于0======");
timer.cancel();
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException{
doGet(request,response);
}


}

4.MyTask.java

//我定义的任务

求助求助哇~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...全文
523 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiange1310 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

session依赖用户会话,而会话会超时。

比如你启动该timer后,过了2个小时,再去停止它,那么session中就找不到这个timer了,因为会话超时了已经。
[/Quote]

哦 明白了!非常感谢!
MiceRice 2012-05-05
  • 打赏
  • 举报
回复
session依赖用户会话,而会话会超时。

比如你启动该timer后,过了2个小时,再去停止它,那么session中就找不到这个timer了,因为会话超时了已经。
jiange1310 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

从程序来看,你的Timer是个局部变量。那么两次请求所获取的Timer必然不是同一个对象。所以你调用cancel()就没啥意义了,跟之前启动的那个对象根本不相干。

两种建议:
1、Timer改为static,操作时注意synchronized;
2、写个Timer管理类,用单例模式。
[/Quote]

谢1楼赐教了!顿悟啊!不过我用了个比较笨的方法改了

我在timer.schedule()之后,将这个timer存在了“timer”中(session.setAttribute()),然后在想要停止的时候再取出这个timer,倒是可以停止了,只是不知道这样会不会有什么弊端呢?还望1楼给解答一下哇~
MiceRice 2012-05-05
  • 打赏
  • 举报
回复
从程序来看,你的Timer是个局部变量。那么两次请求所获取的Timer必然不是同一个对象。所以你调用cancel()就没啥意义了,跟之前启动的那个对象根本不相干。

两种建议:
1、Timer改为static,操作时注意synchronized;
2、写个Timer管理类,用单例模式。

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧