为什么执行AudioSystem.getAudioInputStream时会出现nullpointerException?

Why is there a nullpointerException when execute the AudioSystem.getAudioInputStream?

我确定文件名是正确的!那么AudioSystem.getAudioInputStream的问题是什么?

public class Main {

public static void main(String[] args) {
    public static Clip clip;
    AudioInputStream audioStream = null;
    try {
        //URL soundUrl = Main.class.getResource("D:/eclipse/workplace/AudioTestAPI/2.mp3");
        URL soundUrl = Main.class.getResource("D:/eclipse/workplace/AudioTestAPI/3.wav");
        audioStream = AudioSystem.getAudioInputStream(soundUrl);//42
        clip.open(audioStream);
    } catch(LineUnavailableException e) {
        e.printStackTrace();
    } catch(UnsupportedAudioFileException ex) {
        ex.printStackTrace();
    } catch(IOException eo) {
        eo.printStackTrace();
    }

    clip.start();

    do {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } while(clip.isActive());
}

}

结果:

Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:221)
at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1032)
at Main.main(Main.java:42)

出现 java.lang.NullPointerException 是因为您的变量 soundUrlnull

试试这个:

File file = new File("D:/eclipse/workplace/AudioTestAPI/3.wav");
audioStream = AudioSystem.getAudioInputStream(file);

让我知道在我的建议之后发生了什么。

已编辑:

package com.acme.audio;

import java.io.File;
import java.io.IOException;

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;

public class Main {

    public static void main(String[] args) throws LineUnavailableException {

        Clip clip = AudioSystem.getClip();
        AudioInputStream audioStream = null;

        try {

            File file = new File("D:/eclipse/workplace/AudioTestAPI/3.wav");
            audioStream = AudioSystem.getAudioInputStream(file);
            clip.open(audioStream);

        } catch (LineUnavailableException e) {
            e.printStackTrace();

        } catch (UnsupportedAudioFileException ex) {
            ex.printStackTrace();

        } catch (IOException eo) {
            eo.printStackTrace();
        }

        clip.start();

        do {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } while (clip.isActive());

    }

}