2015-06-01 2 views
0
import java.util.Timer; 
import java.util.TimerTask; 
import java.util.concurrent.*; 
public class SecondsTimer{ 
    private ScheduledExecutorService timer; 
    private int seconds=0; 
    public SecondsTimer(){ 
      long second=1000; 
      timer.scheduleAtFixedRate(new Runnable(){public void run(){seconds++;}}, 
            second, second, TimeUnit.MILLISECONDS); 
    } 
    public int getSeconds(){return seconds;} 
} 

В приведенном выше коде я пытаюсь создать код для подсчета секунд по мере их прохождения. Я получаю ошибку времени выполнения, NullPointerException для строки 9. Есть ли более простой способ сделать это, или я пропускаю что-то очевидное?Вопросы с расписаниемAtFixedRate()

ответ

0

Проблема в том, что вы никогда не устанавливаете переменную timer, поэтому при попытке ее использовать null.

Для руководства по созданию экземпляра интерфейса ScheduledExecutorService, have a look at the docs.

Вам нужно будет установить его перед строкой 9, прежде чем пытаться получить к нему доступ.


Side Примечание: так как вы работаете с несколькими потоками, что все записи доступа к одной переменной, вы должны также look into the concept of thread safety.