`
nid007
  • 浏览: 45910 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

我的定时器(Timer)为什么停止工作了

阅读更多
定时器是个好东西,然而最近发现一个问题,程序运行了一段时间后,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为什么不工作?.docx

    针对“TIA博途中编写的定时器Timer为什么不工作?”这一问题,我们可以从以下几个方面来探讨可能的原因和解决方法: 首先,我们要明确定时器的工作原理。在TIA博途中,定时器基于IEC(International ...

    Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作

    下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句 2、只能在UI主线程中更新...

    vc 定时器 Timer 多媒体定时器 毫秒 ms

    在VC++编程环境中,定时器(Timer)是一个非常重要的组件,它允许程序在特定时间间隔后执行特定的任务。本文将深入探讨VC++中的定时器机制,特别是多媒体定时器(Multimedia Timer),以及如何处理毫秒级的时间精度...

    C#定时器(Timer)

    C#定时器(Timer)是.NET框架中一个非常重要的组件,它允许开发者在特定的时间间隔内执行特定的代码块,从而实现周期性的任务。在Windows应用程序、服务或控制台程序中,C#定时器常常被用来创建后台任务、监控、更新...

    包含了STM32互补输出和TIM2作为从定时器,Timer1而作为另一个定时器Timer2的预分频器,进行计数

    这在需要多个定时器协同工作,例如在复杂的PWM生成或者同步信号处理中非常有用。 Timer1作为预分频器的角色进一步增强了这种灵活性。预分频器用于调整定时器的时钟频率,使得计数可以在更宽的范围内进行。通过设置...

    5 Timer2定时器中断_c8051f340_TIMER2定时器中断_

    例如,TMOD寄存器用于设置TIMER2的工作模式,TCON寄存器用于启动和停止定时器,以及开启或关闭中断。 4. TIMER2中断服务程序: 中断服务程序是中断发生时CPU执行的代码段。它应首先清除中断标志(如TF2),防止重复...

    TMS320C6748 DSP视频教程-12-2-定时器 Timer.rar

    定时器Timer的特性包括但不限于可配置的计数模式、中断服务、预分频器以及多种工作模式。在"12-2-2-定时器 Timer-特性及时钟"这一章节,详细讲解了这些特性,特别是时钟源的选择和配置,如内部时钟、外部时钟、独立...

    C#使用定时器Timer

    如果设置为 `false`,则在触发一次 `Elapsed` 事件后,定时器将停止,除非再次调用 `Start` 方法。 - **Enabled**:表示定时器是否启用。 - **SynchronizingObject**:用于同步事件处理程序的对象。 #### 四、`...

    java 定时器(Timer)

    - 当主线程(如Event Dispatch Thread)结束时,Timer也会停止工作,因为它是依赖于主线程的。 - 在多线程环境中,对Timer的修改(如改变延迟或取消)必须在与创建Timer相同的线程中进行。 7. **示例代码** ```...

    java定时器timer制作

    Java中定时器(Timer)主要用于执行周期性的任务。通过`java.util.Timer`类,可以创建一个定时器对象,该对象负责调度事件。定时器可以用来执行两种类型的定时任务:一次性任务和周期性任务。 #### 一次性任务 一次...

    spring定时器Timer

    spring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rarspring定时器Timer.rar

    高精度定时器Timer

    标题中的“高精度定时器Timer”指的是能够提供毫秒级甚至微秒级精度的定时服务,相较于系统默认的定时器,这种高精度定时器具有更高的稳定性和准确性。 在描述中提到,“精度可以准确到1ms,误差不超2ms”,这意味...

    定时器timer.rar

    本实验资料“定时器timer.rar”是专为学生设计的,目的是让学生了解并掌握ARM7处理器上的定时器操作。 首先,我们要理解定时器的基本原理。定时器是一种硬件电路,它能以预设的时间间隔产生中断请求。在ARM7处理器...

    GD32 Timer定时器的使用

    GD32F330系列单片机是GD32微控制器家族中的一员,它集成了丰富的外设接口,其中Timer(定时器)是其重要组成部分。定时器在嵌入式系统中扮演着核心角色,用于执行各种时间相关的任务,如周期性事件处理、延时操作、...

    自己编写的Delphi组件定时器Timer,内支持线程,不会像D原生那样卡顿及界面.

    在IT行业中,开发人员经常需要使用到定时器(Timer)组件来实现特定的延时或周期性任务。在Delphi编程环境中,系统自带的TTimer组件虽然方便,但在某些复杂场景下,例如需要在定时器触发事件时执行耗时操作,可能会...

    android定时器Timer实例

    这就是定时器(Timer)的作用。本篇文章将详细探讨Android中的Timer类以及如何使用它来实现定时任务。 `Timer`类是Java.util包下的一个工具类,它提供了调度任务在未来某个时间点执行的功能。虽然在Android中,我们...

    定时器Timer实例.rar

    在Java编程语言中,`Timer`类和`...这个`定时器Timer实例`可能包含了以上概念的实例代码,通过查看和运行这些代码,你可以更好地理解`Timer`和`TimerTask`的工作原理,以及如何在实际项目中利用它们来实现定时任务。

    C#中定时器停止问题

    对于 `System.Timers.Timer`,停止定时器的方法是调用 `Stop` 方法,这将取消定时器的下次触发。对于 `System.Windows.Forms.Timer`,同样也有 `Stop` 方法来关闭定时器。 然而,有些开发者可能会尝试设置 `Enabled...

    VS2019 Timer定时器例程MFCApplicationTimerDemTest.rar

    总结,VS2019中的MFC Timer是通过MFC类库提供的API来实现的,包括设置定时器(`SetTimer`)、处理定时器事件(`OnTimer`)以及停止定时器(`KillTimer`)。在MFCApplicationTimerDemTest项目中,我们可以学习到如何...

    Android定时器Timer的停止和重启实现代码

    Android定时器Timer的停止和重启实现代码 Android平台提供了多种方式来实现定时器功能,其中Timer是最常用的方式之一。然而,在实际开发中,我们经常会遇到定时器的停止和重启问题。本篇文章将详细介绍Android实现...

Global site tag (gtag.js) - Google Analytics