定时器是个好东西,然而最近发现一个问题,程序运行了一段时间后,Timer就失效了。仔细研究才发现不是Timer失效了,而是异常没有处理,来看一段简单代码
public class Test extends TimerTask {
public static void main(String[] args) throws SQLException, IOException {
long period=5*1000;
Timer timer = new Timer(true);
timer.schedule(new Test(), 0,period);
System.in.read();
}
@Override
public void run() {
System.out.println("ok");
String a=null;
System.out.println(a.length());
}
}
上面程序就是抛出一个 空指针异常,并没有处理它。
运行后发现
ok
Exception in thread "Timer-0" java.lang.NullPointerException
at ppvod.test.Test.run(Test.java:56)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
然后就再也没有反应了。也就是说只要Timer的run方法出了异常,而没有处理那么这个run方法就再也不会被调用了。
所以为了安全起见,使用Timer的时候,run方法应该这样写:
@Override
public void run() {
try {
System.out.println("ok");
String a = null;
System.out.println(a.length());
} catch (Exception e) {
//这里最把异常打到日志里,方便查问题
e.printStackTrace();
}
}
分享到:
相关推荐
针对“TIA博途中编写的定时器Timer为什么不工作?”这一问题,我们可以从以下几个方面来探讨可能的原因和解决方法: 首先,我们要明确定时器的工作原理。在TIA博途中,定时器基于IEC(International ...
下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句 2、只能在UI主线程中更新...
在VC++编程环境中,定时器(Timer)是一个非常重要的组件,它允许程序在特定时间间隔后执行特定的任务。本文将深入探讨VC++中的定时器机制,特别是多媒体定时器(Multimedia Timer),以及如何处理毫秒级的时间精度...
C#定时器(Timer)是.NET框架中一个非常重要的组件,它允许开发者在特定的时间间隔内执行特定的代码块,从而实现周期性的任务。在Windows应用程序、服务或控制台程序中,C#定时器常常被用来创建后台任务、监控、更新...
这在需要多个定时器协同工作,例如在复杂的PWM生成或者同步信号处理中非常有用。 Timer1作为预分频器的角色进一步增强了这种灵活性。预分频器用于调整定时器的时钟频率,使得计数可以在更宽的范围内进行。通过设置...
例如,TMOD寄存器用于设置TIMER2的工作模式,TCON寄存器用于启动和停止定时器,以及开启或关闭中断。 4. TIMER2中断服务程序: 中断服务程序是中断发生时CPU执行的代码段。它应首先清除中断标志(如TF2),防止重复...
定时器Timer的特性包括但不限于可配置的计数模式、中断服务、预分频器以及多种工作模式。在"12-2-2-定时器 Timer-特性及时钟"这一章节,详细讲解了这些特性,特别是时钟源的选择和配置,如内部时钟、外部时钟、独立...
如果设置为 `false`,则在触发一次 `Elapsed` 事件后,定时器将停止,除非再次调用 `Start` 方法。 - **Enabled**:表示定时器是否启用。 - **SynchronizingObject**:用于同步事件处理程序的对象。 #### 四、`...
- 当主线程(如Event Dispatch Thread)结束时,Timer也会停止工作,因为它是依赖于主线程的。 - 在多线程环境中,对Timer的修改(如改变延迟或取消)必须在与创建Timer相同的线程中进行。 7. **示例代码** ```...
Java中定时器(Timer)主要用于执行周期性的任务。通过`java.util.Timer`类,可以创建一个定时器对象,该对象负责调度事件。定时器可以用来执行两种类型的定时任务:一次性任务和周期性任务。 #### 一次性任务 一次...
spring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rar
标题中的“高精度定时器Timer”指的是能够提供毫秒级甚至微秒级精度的定时服务,相较于系统默认的定时器,这种高精度定时器具有更高的稳定性和准确性。 在描述中提到,“精度可以准确到1ms,误差不超2ms”,这意味...
本实验资料“定时器timer.rar”是专为学生设计的,目的是让学生了解并掌握ARM7处理器上的定时器操作。 首先,我们要理解定时器的基本原理。定时器是一种硬件电路,它能以预设的时间间隔产生中断请求。在ARM7处理器...
GD32F330系列单片机是GD32微控制器家族中的一员,它集成了丰富的外设接口,其中Timer(定时器)是其重要组成部分。定时器在嵌入式系统中扮演着核心角色,用于执行各种时间相关的任务,如周期性事件处理、延时操作、...
在IT行业中,开发人员经常需要使用到定时器(Timer)组件来实现特定的延时或周期性任务。在Delphi编程环境中,系统自带的TTimer组件虽然方便,但在某些复杂场景下,例如需要在定时器触发事件时执行耗时操作,可能会...
这就是定时器(Timer)的作用。本篇文章将详细探讨Android中的Timer类以及如何使用它来实现定时任务。 `Timer`类是Java.util包下的一个工具类,它提供了调度任务在未来某个时间点执行的功能。虽然在Android中,我们...
在Java编程语言中,`Timer`类和`...这个`定时器Timer实例`可能包含了以上概念的实例代码,通过查看和运行这些代码,你可以更好地理解`Timer`和`TimerTask`的工作原理,以及如何在实际项目中利用它们来实现定时任务。
对于 `System.Timers.Timer`,停止定时器的方法是调用 `Stop` 方法,这将取消定时器的下次触发。对于 `System.Windows.Forms.Timer`,同样也有 `Stop` 方法来关闭定时器。 然而,有些开发者可能会尝试设置 `Enabled...
总结,VS2019中的MFC Timer是通过MFC类库提供的API来实现的,包括设置定时器(`SetTimer`)、处理定时器事件(`OnTimer`)以及停止定时器(`KillTimer`)。在MFCApplicationTimerDemTest项目中,我们可以学习到如何...
Android定时器Timer的停止和重启实现代码 Android平台提供了多种方式来实现定时器功能,其中Timer是最常用的方式之一。然而,在实际开发中,我们经常会遇到定时器的停止和重启问题。本篇文章将详细介绍Android实现...