Java 计时器不会在调用.cancel()后立即取消

Java 计时器不会在调用.cancel()后立即取消,java,timer,timertask,Java,Timer,Timertask,我有一个带有播放和暂停按钮的GUI。播放按钮按下时,根据从文件读取的时间戳安排计时器,并根据时间戳在网络上发布一些数据。例如,如果我正在处理的外商投资企业具有以下时间戳: .00111 .0222 .025585 在第一次时间戳之后,数据将被发布到网络上,其余的时间戳也是如此 尽管在单击暂停按钮时,我取消和清除计时器,但我从控制台收到以下错误 为什么只要我cancel和purge定时器,我就会收到这样的错误 更新_1 控制台o/p是否可能是因为调度了太多的QUED计时器,并且在按下pause“t

我有一个带有播放和暂停按钮的
GUI
。播放按钮按下时,根据从文件读取的时间戳安排计时器,并根据时间戳在网络上发布一些数据。例如,如果我正在处理的外商投资企业具有以下时间戳:

.00111 .0222 .025585

在第一次时间戳之后,数据将被发布到网络上,其余的时间戳也是如此

尽管在单击暂停按钮时,我
取消
清除
计时器,但我从控制台收到以下错误

为什么只要我
cancel
purge
定时器,我就会收到这样的错误

更新_1

控制台o/p是否可能是因为调度了太多的QUED计时器,并且在按下pause“timer.cancel and timer.purge)后,无法再运行/调度这些计时器

按下暂停按钮后控制台o/p

Exception in thread "TimeStampThread_1_29.372000000003" java.lang.IllegalStateException: 
Timer already cancelled.
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)
at org.eclipse.paho.sample.GuiMenuBar$TimeStampTimerThread.run(GuiMenuBar.java:966)
at java.lang.Thread.run(Unknown Source)
Exception in thread "TimeStampThread_1_29.252000000000" java.lang.IllegalStateException: Timer    
already cancelled.
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)
at org.eclipse.paho.sample.GuiMenuBar$TimeStampTimerThread.run(GuiMenuBar.java:966)
at java.lang.Thread.run(Unknown Source)
Exception in thread "TimeStampThread_1_29.302000000003" java.lang.IllegalStateException: Timer 
already cancelled.
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)

您可能需要包含一些代码。顺便说一句,如果你想重新启动一个被取消的计时器(这是java计时器无法做到的),这个错误看起来像是你会得到的东西@Ordous谢谢你的评论。这可能是因为我在问题的更新1部分中提到了什么?是错误还是类似于警告在
Timer.schedule()
上引用Javadoc:“
IllegalStateException
-如果任务已被调度或取消,则计时器被取消,或计时器线程终止。”。我有一个非常强烈的感觉,这正是你想要做的,你需要创建一个新的计时器,而不是重复使用旧的计时器,但我不能确定,直到我看到你的代码:)是的,我只有一个计时器,因为我只需要一个计时器根据时间戳从零开始启动动作,例如,时间戳2s,3s,4s,5秒…10秒。我希望我的计时器从零开始只启动一次,当达到1s时,应该执行一个操作,当达到2s时,同样的事情会再次启动到10s。如果我每次都使用新计时器,第一个计时器将等待1s,第二个计时器将等待1s+1s,第三个计时器将等待1s+2s,第十个计时器将从0s->10s等待,这样的方式不适合我正在开发的应用程序,为什么你不能有一个计时器,并且只有在取消暂停后才能创建一个新的计时器?(像这样)