执行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)
答案 0 :(得分:2)
我敢打赌,sequencer.getMicrosecondPosition()
会返回Long
并且它为空。出现此问题是因为自动装箱/取消装箱无法处理空值。
自动装箱是指java将基本类型转换为其对象包装器,例如long
到Long
。您可以在这些docs中详细了解此功能。
没有办法解决这个问题,因为这取决于你想做什么。可能你可以用{/ 1>替换run()
的正文
long position = 0;
if( sequencer.getMicrosecondPosition() != null ) {
position = sequencer.getMicrosecondPosition();
}
System.out.println("sec" + position/1000000);
如果getMicrosecondPosition()为null,将默认位置为