我一直在尝试在我的应用中播放音乐。我一直在使用示例BigClip代码:

try {
        url = new URL(Sounds.class.getResourceAsStream("title1.wav").toString());
        } catch (MalformedURLException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        BigClip clip = new BigClip();
        AudioInputStream ais = null;
        try {
            ais = AudioSystem.getAudioInputStream(url);
        } catch (UnsupportedAudioFileException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            clip.open(ais);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (LineUnavailableException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        clip.start();
        JOptionPane.showMessageDialog(null, "BigClip.start()");
        clip.loop(4);
        JOptionPane.showMessageDialog(null, "BigClip.loop(4)");
        clip.setFastForward(true);
        clip.loop(8);
        // the looping/FF combo. reveals a bug..
        // there is a slight 'click' in the sound that should not be audible
        JOptionPane.showMessageDialog(null, "Are you on speed?");
}

当我仅使用title1.wav时,出现此错误:
java.net.MalformedURLException: no protocol: java.io.BufferedInputStream

当我添加协议(protocol)file://时,我得到了NullPointerException,尽管我看不出是什么原因引起的。

我使用了错误的协议(protocol),还是做错了其他事情?提前致谢!

最佳答案

假设您的文件与Sounds类位于同一包(“目录”)中,请使用

url = Sounds.class.getResource("title1.wav");

因为
new URL(Sounds.class.getResourceAsStream("title1.wav").toString())

只是注定不会工作。您正在InputStream的实例上调用toString

NPE发生的原因可能是AudioSystem.getAudioInputStream由于URL路径错误而失败,因此ais为null,并且BigClipopen抛出了NPE。

09-30 19:23