我在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管理类,用单例模式。