Java计时器错误异常

时间:2011-08-07 17:11:17

标签: java

执行timertask时有一个奇怪的错误,原因是什么?

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)

1 个答案:

答案 0 :(得分:2)

我敢打赌,sequencer.getMicrosecondPosition()会返回Long并且它为空。出现此问题是因为自动装箱/取消装箱无法处理空值。

修改

自动装箱是指java将基本类型转换为其对象包装器,例如longLong。您可以在这些docs中详细了解此功能。

没有办法解决这个问题,因为这取决于你想做什么。可能你可以用{/ 1>替换run()的正文

long position = 0;
if( sequencer.getMicrosecondPosition() != null ) {
    position = sequencer.getMicrosecondPosition();
}

System.out.println("sec" + position/1000000);
如果getMicrosecondPosition()为null,

将默认位置为