2008年08月22日(金) [長年日記]
- 仕様がなかなかfixしない。
■ [java] TimerTask#run()内で例外をthrowしてはダメ
java.util.Timerを初めて使った。ら、
java.lang.IllegalStateException: Timer already cancelled. at java.util.Timer.sched(Timer.java:354) at java.util.Timer.schedule(Timer.java:170)
という例外が投げられてしまいTimerTaskをセットできず困った。Timerのキャンセルなんかしていないのに。
原因は、TimerにセットしたTimerTaskのrun()内で例外が投げられていたからみたい。TimerTask#run()内で例外が投げられると、それを実行するTimerはキャンセルされてしまう(止まってしまう)ようだ。
なので、TimerTaskのサブクラスはrun()内で例外を投げないよう気を付けて実装しないといけない。