如何在导出的 jar 文件中播放 .wav 文件?
Posted
技术标签:
【中文标题】如何在导出的 jar 文件中播放 .wav 文件?【英文标题】:how can I play a .wav file in an exported jar file? 【发布时间】:2021-04-09 16:31:00 【问题描述】:我想创建一个游戏,它应该包含在后台播放的音乐。音乐文件是源文件夹中的 .wav 文件。
如何在 main 方法中使用我的代码播放可执行 jar 文件中的音乐:
public class PlayMusic
public static void main(String[] args) throws LineUnavailableException, IOException, UnsupportedAudioFileException, InterruptedException
File file = new File("MusicPlayer/SnakeOST.wav");
AudioInputStream audiostream = AudioSystem.getAudioInputStream(file);
Clip clip = AudioSystem.getClip();
clip.open(audioStream);
clip.start();
clip.loop(Clip.LOOP_CONTINUOUSLY) ;
此代码在 Eclipse 中可以正常工作,但在导出代码后 .jar 文件中缺少音乐。
【问题讨论】:
当 JAR 文件中包含某些内容时,它就是“资源”。资源在概念上不是文件,这意味着您不应尝试通过java.io.File
或java.nio.file.*
访问它们。使用 Java 提供的资源 API 获取资源的 URL(例如 Class#getResource(String)
),然后将该 URL 传递给 AudioSystem#getAudioInputStream(URL)
。请注意,如果 Class#getResource(String)
正在返回 null
,那么要么您传递了错误的参数,要么资源未包含在您的 JAR 文件中。
【参考方案1】:
您的问题是,您的路径是在您的 src 文件夹中寻找一个名为 MusicPlayer 的文件夹。 您想使用绝对路径,例如:
/MusicPlayer/SnakeOST.wav
这样,路径将从 jar 的根目录开始,然后查找名为“MusicPlayer”的文件夹
编辑: 您需要对您的课程的引用,例如:
App.class.getResourceAsStream("/model/test.png")
或
App.class.getResource("/model/test.png")
【讨论】:
这还不够。开发人员首先需要确保 .WAV 文件在 .JAR 文件中(例如,将其放在“资源”目录之类的;我不使用 Eclipse,所以我不知道正确的咒语)然后使用Class.getResource()
获取对它的引用。
我创建了一个名为“MusicPlayer”的源文件夹,其中放置了 .wav 歌曲文件。此源文件夹不在 src 文件中,因为 eclipse 会再次共享错误标志。这就是我在项目文件夹中分别创建 src 和源文件夹的原因。当我尝试使用 URL 和 getclass().getResource() 时,我收到另一个错误信号,显示 this.clip = null。
我的错,我以为我是这样做的,我编辑了我的答案以上是关于如何在导出的 jar 文件中播放 .wav 文件?的主要内容,如果未能解决你的问题,请参考以下文章
在从 Intellij IDEA 创建的 jar 文件中播放 .wav 时出现问题