2014-04-06 81 views
1

使用javax.sound.sampled.Clip困惑NullPointerException 在Mac上運行在Eclipse上。 輸入波形文件存在, 構造函數正常工作。對象實例已創建。 只是不能訪問它們中的任何一個的實例方法。 這裏可能是Java 101的問題,所以我提前道歉,如果是的話? 或者日食101,對於這個問題......使用javax.sound.sampled.Clip困惑NullPointerException

public class AudioClipTester { 

public static void main(String[] args) 
{ 
    // TODO Auto-generated method stub 

    AudioClipPlayer mooMoo = new AudioClipPlayer("cow.wav"); 
    mooMoo.play(); 
} 
} 

/=====

import java.io.File; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.UnsupportedAudioFileException; 

/** 
* Handles play, pause, and looping of sounds for the game. 
* @author Tyler Thomas 
* 
*/ 
public class AudioClipPlayer 
{ 
    private Clip myClip; 
    public AudioClipPlayer(String fileName) { 
      try { 
       File file = new File(fileName); 
       if (file.exists()) { 
        Clip myClip = AudioSystem.getClip(); 
        System.out.println("file "+fileName+" is in root dir"); 
        AudioInputStream ais = AudioSystem.getAudioInputStream(file.toURI().toURL()); 
        myClip.open(ais); 
        System.out.println("ais "+ais.toString()+" is open"); 
        } 
       else { 
        throw new RuntimeException("Sound: file not found: " + fileName); 
       } 
      } 
      catch (MalformedURLException e) { 
       throw new RuntimeException("Sound: Malformed URL: " + e); 
      } 
      catch (UnsupportedAudioFileException e) { 
       throw new RuntimeException("Sound: Unsupported Audio File: " + e); 
      } 
      catch (IOException e) { 
       throw new RuntimeException("Sound: Input/Output Error: " + e); 
      } 
      catch (LineUnavailableException e) { 
       throw new RuntimeException("Sound: Line Unavailable: " + e); 
      } 
    } 
    public void play(){ 
     System.out.println("clip "+myClip.toString()+" is about to play"); 
     myClip.setFramePosition(0); // Must always rewind! 
     myClip.loop(0); 
     myClip.start(); 
//   Thread.sleep(10000); 

    } 
    public void loop(){ 
     myClip.loop(Clip.LOOP_CONTINUOUSLY); 
    } 
    public void stop(){ 
     myClip.stop(); 
    } 

}

回答

0

這是因爲在以下行:

Clip myClip = AudioSystem.getClip(); 

您聲明並初始化局部變量,並且myClip字段保留爲空。嘗試用

替換上述行
myClip = AudioSystem.getClip();