我已将所有类文件和资源打包为 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/