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



我这里有一些代码,这让我很困惑;我正试图弄清楚为什么会出现空指针异常。我为每个循环设置了一个来初始化每个剪辑。如果我自己初始化每一个,它运行得很好,片段就会播放。

  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();}

当我稍后在节目中添加更多的声音片段和音乐片段时,这将成为一个麻烦。有人知道这是什么原因吗?

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

例如,change:

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();
}

顺便说一句,避免在通话时将通话压缩到一条线上。明智地使用空白是没有成本的,所以明智地使用它来帮助提高代码的可读性(从而提高"调试能力")。

最新更新