(Java)尝试使用getResourceAsStream()从JAR文件加载剪辑,但仅适用于我的IDE



我正试图从我的JAR文件加载一个剪辑,但它只在我的IDE(NetBeans(中工作,而在我运行它的JAR可执行文件时不工作。

这是我使用的返回片段的代码:

public static Clip getClipFromJar(String filePath) {
    try {
        Clip clip = AudioSystem.getClip();
        clip.open(AudioSystem.getAudioInputStream(FileLoader.class.getResourceAsStream(filePath)));
        return clip;
    } catch (Exception error) {
        System.exit(-1);
        return null;
    }
}

我真的被卡住了,使用getResourceAsStream((似乎适用于其他事情,比如图像,但它不适用于获取剪辑。

谢谢大家的帮助!我从你们那里得到的技巧通常对编程很好,所以谢谢!:(

获取URL,处理AudioInputStreamAudioSytem,然后返回clip。在之后,clip可以像clip.start()一样启动

try{ 
    URL soundURL = getClass().getResource(filePath); 
    AudioInputStream AIS = AudioSystem.getAudioInputStream(soundURL); 
    Clip clip = AudioSystem.getClip(); 
    clip.open(AIS);
    return clip;
} catch (Exception ex) {
    ex.printStackTrace();
}

注意:我试过这个代码,它在IDE和之外都能正常工作

getResourceAsStream()在类路径上查找其资源,从类本身的位置开始——因此,如果您的剪辑(或任何资源(与类在同一文件夹中,它就会在那里找到它。如果它不存在,您必须确保它在类路径中的某个位置,听起来这可能是IDE环境和程序运行时之间的区别。

看看你的"filepath"——当然,如果它以斜杠开头,那么它就是绝对的,等等。;我假设你知道绝对路径和相对路径。

一个调试建议--消除所有调用的"堆叠"。打一个电话获取流;再调用一次以获取音频输入流,再调用第三次以打开它。然后,您至少可以放入跟踪语句来查看其中哪一个失败(因为您无法在IDE之外进行调试,而且它在那里没有失败(。

最新更新