作者superlubu (劲过吕布)
看板java
标题Re: [J2SE] Java utility timer重设一问
时间Wed Jul 11 09:31:50 2007
※ 引述《Harifucks (疝气)》之铭言:
: 请问各位先进,以上是小弟的Timer程式码,就是程式执行60秒以後,要把网路连线
: 关闭。但是假设某一些条件成立後,timer又必须重设为60秒
: 假设小弟想要重设Timer的时间:
: <1>再呼叫一次timer.schedule(timerTask, 1*60*1000);
: <2>先呼叫cancel(),再呼叫timer.schedule(timerTask, 1*60*1000);
: 都发生IllegalStateException,请问如果要重设timer的时间,
: 要怎麽做呢,请各位先进指导,谢谢。
似乎是需要再 create 一个新的 TimerTask 才可以这样重新 schedule...
不过这样蛮没效率的。
看来是因为在 TimeTask 里面有些 private member variable 记着这个 Task
曾否 schedule 过...
可以考虑一下改变形式... 在 TimerTask 中加入一个 member variable 作为
倒数的数字, 预设为 60000 (60s), 再将它用 Timer.scheduleAtFixedRate()
设成每十秒跑一次, 然後在 run() 中将那个倒数的 member variable 减十秒...
当 member variable <= 0 时就可以把 connection close 掉。
而在 checkState() function 中, if (checkState==true) 时则把 TimerTask 中
的倒数 member variable 设回 60 秒... 如此一来, 便「大致上」可将 TimerTask
reset 了
不过这个方法是没法令每次 reset 时将它很准确地设定成 60 秒後 close
connection,只能保证在 51-59 秒之间.
--
劲过吕布的劲过相簿...
http://www.pixnet.net/superlubu
乱七八糟的,不好意思 m(_ _)m
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 147.8.130.225