日期:2014-05-17  浏览次数:20879 次

【求教】timer怎么停止啊????
我在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

//我定义的任务

求助求助哇~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

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