1

mystified with javax.sound.sampled.Clip NullPointerException Running on Eclipse on a Mac. Input wave file exists, Constructor works fine. Object instance is created. Just can't access the instance methods, any of them. Probably a Java 101 issue here, so I apologize in advance, if so? Or Eclipses 101, for that matter...

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

}

1 Answers1

0

That is because in the following line:

 Clip myClip = AudioSystem.getClip();

you declare and initialize local variable and the field myClip stays null. Try to replace the above line with

 myClip = AudioSystem.getClip();
kostya
  • 9,221
  • 1
  • 29
  • 36