使用Ressources导出JAR,音频将无法播放

时间:2014-01-16 04:05:33

标签: java eclipse jar executable-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。

3 个答案:

答案 0 :(得分:1)

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

所以,你可以像这样使用它:

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

File fi = new File(is);

告诉我结果:)

答案 1 :(得分:0)

解决方案

尝试在导出jar之前将gmu.mp3置于源内。

为什么?

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

让我知道它是怎么回事--Scott

答案 2 :(得分:0)

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

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

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