2013-06-27 4 views
1

У меня есть код, который запускается каждые 5 секунд в TimerTask, также используя ExecutorService, чтобы охватить поток для каждого пула.TimerTask return nullpointer Exception

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(); 
} 

Но получить следующие исключения нулевого указателя иногда: Не уверен, что why.Also с помощью 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) 
+0

Подождите ... Почему вы не используете «ScheduledExecutorService»? – fge

+0

Что на линии 117? – Thihara

+0

У меня завершение() на линии 117, наконец, { \t \t \t \t Исполнитель Service.shutdown(); \t \t \t \t} – user2325703

ответ

0

Я не могу сказать, если у вас есть try перед if, но вы не может использовать finally без по крайней мере try. Он может не перейти к if, если alertingPools.isEmpty(), что означает , он даже не инициализирует executorService = Executors.newFixedThreadPool((Pools.length));. Это приведет к тому, что предложение finally вернется как null.shutdown, вызывая проблемы. Если возможно, попробуйте переместить инициализацию до if. Я бы начал, пытаясь выяснить погоду alertingPools.isEmpty() или нет.