尝试播放声音时出现NullPointerException

时间:2020-09-01 16:31:14

标签: java audio

我有一个简单的程序,可以在运行时播放声音。

代码:

public static void main(String[] args) {
     try {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(Main.class.getResource("ProgramAudio\\chechen.wav"));
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            clip.start();
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }
}

错误:

java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:222)
at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1032)
at aChatProgramAudio.audio2.main(audio2.java:13)

也许给定目录与此有关,但是确实存在。

1 个答案:

答案 0 :(得分:1)

有些尝试的机会。

在此版本中,将chechen.wavMain.java放在同一软件包文件夹中。

URL url = Main.class.getResource("chechen.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);

如果您的包文件夹结构类似于以下内容(其中ProgramAudiosrc下的包):

src/yourProgramCodePackage/Main.java
src/ProgramAudio/chechen.wav

然后,使用“绝对”寻址,以下内容应该会起作用。

URL url = Main.class.getResource("/ProgramAudio/chechen.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);

如果您具有以下文件夹结构,其中ProgramAudio是其中包含Main.java的代码包的子文件夹,则“相对”寻址形式应该起作用。

src/yourProgramCodePackage/Main.java
src/yourProgramCodePackage/ProgramAudio/chechen.wav

URL url = Main.class.getResource("ProgramAudio/chechen.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);

遵循包名称约定并使用小写或驼色大写可能是个好主意,例如,programAudio用作包名称。