【问题标题】:TimerTask returning nullpointer ExceptionTimerTask 返回空指针异常
【发布时间】:2013-06-27 05:47:42
【问题描述】:

我有一段代码在 TimerTask 中每 5 秒运行一次,还使用 ​​ExecutorService 为每个池跨越一个线程。

if(!alertingPools.isEmpty())
{
    Object[] Pools = alertingPools.values().toArray();
    executorService = Executors.newFixedThreadPool((Pools.length));
    for (Object pool : Pools) {
        executorService.execute(new DataAccumulation(timeStartSecData,
            timeEndSec,pool, jsonArrayResult));

finally {
    executorService.shutdown();
}

但有时会出现以下空指针异常:不知道为什么。还使用 ExecutorService 为每个池跨越一个线程

  Exception in thread "Timer-0" java.lang.NullPointerException
        at com.ebay.lbmongoservice.AlertsData$1.run(AlertsData.java:117)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)

【问题讨论】:

  • 等等...你为什么不使用ScheduledExecutorService
  • 我终于在第 117 行有 shutdown() { executorService.shutdown(); }
  • @fge: 如何使用ScheduledExecutorService?没用过
  • 您可以.scheduleAtFixedRate() 任何您选择的内容。 Link to Javadoc。它比计时器更容易使用。

标签: java timertask


【解决方案1】:

我不知道你是否在if 之前有一个try,但你不能在没有try 的情况下使用finally。如果alertingPools.isEmpty(),它可能不会转到if,这意味着 它甚至从未初始化executorService = Executors.newFixedThreadPool((Pools.length));。这将导致 finally 子句以null.shutdown 的形式返回,从而导致问题。如果可能,尝试将初始化移到if 之前。我会首先尝试找出alertingPools.isEmpty() 的天气情况。

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多