在for循环中初始化Clip后,剪辑上的NullPointer

时间:2015-02-15 03:52:47

标签: java foreach nullpointerexception clip

我这里有一些代码,这让我感到困惑;我试图找出为什么我得到一个空指针异常。我设置了for-each-loop来初始化每个剪辑。如果我自己初始化每个,它工作正常,剪辑播放。

  musicArr[0]=menuMusic;
  soundArr[0]=shotSound;
  try
  {
     for(Clip c:musicArr)c=AudioSystem.getClip();
     for(Clip c:soundArr)c=AudioSystem.getClip();
     menuMusic.open(AudioSystem.getAudioInputStream(new File("menuMusic.wav")));
     shotSound.open(AudioSystem.getAudioInputStream(new File("shot.wav")));
  }catch(LineUnavailableException|UnsupportedAudioFileException|IOException ex){ex.printStackTrace();}

当我向节目中添加更多声音片段和音乐片段时,这将成为一种麻烦。有人知道原因吗?

1 个答案:

答案 0 :(得分:3)

由于构造每个循环的方式,您无法为循环内的循环项目分配引用。您可以更改对象的状态,是的,但是您无法将新对象分配给循环项。解决方案是将for-each循环更改为传统的for循环。

例如,更改:

for(Clip c:musicArr)c=AudioSystem.getClip();

// if musicArr is an array and not an ArrayList
for (int i = 0; i < musicArr.length; i++) {
    musicArr[i] = AudioSystem.getClip();
}

作为旁注,请避免在您执行操作时将呼叫压缩到一行。智能使用空白区域是免费的,因此请巧妙地使用它来帮助您的代码的可读性(以及“调试能力”)。