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

(Java) Trying to load a clip from JAR file using getResourceAsStream(), but works only on my IDE

我正在尝试从我的 JAR 文件加载一个剪辑,但它只在我的 IDE (NetBeans) 中有效,而在我 运行 它的 JAR 可执行文件中无效。

这是我在 returns 剪辑中使用的代码:

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() 似乎适用于图像等其他东西,但它不适用于获取剪辑。

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

getResourceAsStream() 在 class 路径上寻找它的资源,从 class 本身的位置开始——所以如果你的剪辑(或任何资源)在同一个文件夹作为 class,它会在那里找到它。如果它不存在,您必须确保将它放在 class 路径中的某处,这听起来可能是您的 IDE 环境和程序运行时之间的差异。

看看你也有 'filepath' -- 如果它当然以斜杠开头,它是绝对的,等等;我假设您知道绝对路径和相对路径。

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

获取 URL ,处理 AudioInputStreamAudioSytem 然后 return clipclip 之后可以像 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 和

之外都能正常工作