メモの日々


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()内で例外を投げないよう気を付けて実装しないといけない。