我在执行一个定时器任务的时候出现了一个奇怪的错误,是什么导致的?
public void tick(long milliseconds) {
ctimer = new Timer();
ctimer.schedule(new TimerTask() {
public void run() {
System.out.println("sec"+sequencer.getMicrosecondPosition()/1000000); }
}, 0, milliseconds);
}来自命令提示符的错误消息:
Exception in thread "Timer-0" java.lang.NullPointerException
at MidiTest$1.run(miditest.java:244)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)发布于 2011-08-08 01:14:25
我敢打赌,sequencer.getMicrosecondPosition()会返回一个Long,并且它是空的。发生这个问题是因为自动装箱/取消装箱不能处理空值。
编辑
自动装箱是指java将原始类型转换为它的对象包装器,例如从long转换为Long。您可以在这些docs中阅读有关此功能的更多信息。
没有解决这个问题的方法,因为这取决于你想要做什么。也许您可以将run()的主体替换为
long position = 0;
if( sequencer.getMicrosecondPosition() != null ) {
position = sequencer.getMicrosecondPosition();
}
System.out.println("sec" + position/1000000);如果getMicrosecondPosition()为空,则默认位置为0
https://stackoverflow.com/questions/6974334
复制相似问题