看板 java 關於我們 聯絡資訊
※ 引述《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