导出带有资源 JAR 时,音频无法播放



我做了一个小游戏,需要在上面播放背景音乐,我有图像、一个 txt 文件和一个音频文件,除了音频文件外,它们在导出 JAR 后都可以工作。

这是我用来导入的代码:

图片 :

(new ImageIcon(getClass().getResource("/data/131868.jpg"))

文本文件 :

BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/data/dictionnaire.txt")));

音频文件(我还包括了我在搜索时找到的播放代码):

File f =new File(Main.class.getResource("/data/gmu.mp3").getFile());
final Player p=Manager.createRealizedPlayer(f.toURI().toURL());
        p.start();
        while(true){
            if(p.getMediaTime().getSeconds()==p.getDuration().getSeconds()){
                p.stop();
                p.setMediaTime(new Time(0));
                p.start();
            }
        }

基本上File对象是:File f = new File("/data/gmu.mp3")我只是添加了修改以使其看起来像其他对象......

它确实在Eclipse中起作用,但不能在JAR中工作。

你最好知道:文件只是文件的名称,而不是文件本身。就像门牌号一样,它告诉你房子的位置,但不代表房子。

因此,您可以像这样使用它:

InputStream is = this.getClass().getResourceAsStream("/data/gmu.mp3");

File fi = new File(is);

告诉我结果:)

解决方案

在导出 jar 之前,请尝试将gmu.mp3放在源内。

为什么?

导出 jar 时,它会将源文件夹中的所有有趣代码包装起来。 File f = new File("/data/gmu.mp3")只是将程序指向文件系统中的文件名 gmu.mp3。如果将gmu.mp3放在源文件夹中并更新 File 构造函数以反映新位置,则mp3应与所有代码一起包装到 jar 中。

让我知道它是怎么回事-斯科特

java.io.File将jar-ed文件表示为"ThePacked.jar!/path/inside/file.mp3",这在用作文件时会出现问题。

要读取jar-ed文件的内容,您可以从getResourceAsStream(String filename)给出的InputStream中读取。

要将该文件用作真正的java.io.File,(我所做的是)从InputStream中读取它并将其复制到jar之外的位置(例如,到临时文件)。

最新更新