我正在用Java制作中提琴。在这种情况下,我想播放音高,记录音高并进行播放。
然后,我使用Java线程向队列添加音调并向队列添加延迟。我将线程对象用于这些过程,并在构造函数中调用它。调用此构造函数后,它给出NullPointException
。
您能帮我找出原因吗?
public PianoPlayer() throws MidiUnavailableException{
queue = new LinkedBlockingQueue<NoteEvent>();
delayQueue = new LinkedBlockingQueue<NoteEvent>();
machine = new PianoMachine(this);
processQueue.start();
processDelayQueue.start();
}
Thread processDelayQueue = new Thread() {
public void run(){
while(true){
if(queue.isEmpty()){
}
else{
try {
NoteEvent e=queue.take();
midi.Midi.wait(100);
queue.put(e);
} catch (InterruptedException ex) {
Logger.getLogger(PianoPlayer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
};
答案 0 :(得分:0)
检查processQueue和processDelayQueue是否不为null。 NullPointerException通常是在您尝试调用方法或从对象为null的变量中获取值时引起的。
例如
MyClass c = null;
// NullPointerException
String name = c.getName();
可能的解决方法
MyClass c = null;
if (c == null) {
// initialize
c = new MyClass();
}
// This will work
String r = c.getName();
您需要始终进行null检查,因为获取null变量非常常见。