如何在导出的 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.Filejava.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 文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用java从jar作为资源播放.wav文件

在从 Intellij IDEA 创建的 jar 文件中播放 .wav 时出现问题

声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放

如何在 Windows 中播放 .wav 文件?

波形文件导出已损坏

如何在python中播放wav文件?