java - jar 中不播放声音

标签 java jar javasound

我已将所有类文件和资源打包为 jar,但在执行时声音文件无法播放。我的包结构是:

+project
|_classes
|_ _*.class
|_resources
|_ _ *.jpg,*.wav

代码:

AudioInputStream inputStream = AudioSystem.getAudioInputStream(kidsClassRoom.class.getResourceAsStream("../resources/"+file));

执行此行时得到null!!

最佳答案

已经提出的理论的替代理论。通常,成功的 getResource() 调用取决于调用来定位它们的类加载器实例。因此,我建议使用用户定义对象的实例,从中调用 getResource()。例如

// Sanity check
System.out.println("The value of 'file' is: " + file);
// Presuming kidsClassRoom1 is an instance of kidsClassRoom
AudioInputStream inputStream = AudioSystem.
    getAudioInputStream(
        kidsClassRoom1.
            getClass().
            getResourceAsStream("/resources/"+file));

您可能还会注意到,代码片段对资源使用前缀“/”。与其他人所说的相反,我相信这意味着“从根”资源路径,无论在运行时类路径上的任何 Jar 中找到它。保留“/”或“../”将使类加载器在发生这种情况的类的子路径中搜索资源。

当然 - 确保 Wav 最终进入 Jar!将 .jar 复制/重命名为 .zip 并双击它,这是在 Windows 上检查存档内容的“快速而肮脏”的方法。

关于java - jar 中不播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923907/

相关文章:

eclipse - 外部 jar 无法在 Ubuntu 中的 eclipse 中解析

maven - 将属性添加到 Maven 中的 jar list 的最简单方法

java - 返回音频文件类型列表

Java 音频输入不一致

java - 如何为单个代码库但多个 Artifact 配置 Maven

java - Java Applet:基本鼓组

java - 如何调用传递的方法?这就是委托(delegate)吧?

java - 如何在 IntelliJ IDEA 14 中启用 "View External Documentation"选项

java - UnsupportedClassVersionError 消息 "Bad java version"和 "Unsupported major.minor version"是否相同?

java - 使用循环导航到下一页时,Selenium 出现过时异常