我的.jar文件无法打开MP3文件(我使用Jlayer - JZoom库)

时间:2015-08-05 06:31:34

标签: java audio jar mp3 jlayer

我做了这个小型的Java项目,它打开了不同的MP3文件。为此我下载了JLayer 1.0.1库并将其添加到我的项目中。我还将MP3文件添加到我项目的包中 - 以及一些JPG图像 - 以便从那里获取它们,并且我使用散列图(mapa)和这种方法来获取它们:

public static String consiguePath (int i) {


return AppUtils.class.getClass().getResource("/Movimiento/" + mapa.get(i)).getPath();

}

以避免绝对路径。

当我打开MP3文件时,我这样做:

try {
                            File archivo = new File(AppUtils.consiguePath(12));
                            FileInputStream fis = new FileInputStream(archivo);
                            BufferedInputStream bis = new BufferedInputStream(fis);
                            try {
                                Player player = new Player(bis);
                                player.play();
                            } catch (JavaLayerException jle) {
                            }
                        } catch (IOException e) {
                        }

整个过程在NetBeans中完美运行,但是当我构建一个.jar文件并执行它时,它运行良好,但它不会打开MP3文件。引起我注意的是,它在打开同一包装上的JPG文件时没有遇到麻烦。

生成.jar后,我检查了MyProject / build / classes / Movimiento文件夹,所有的MP3文件实际上都存在,所以我不知道可能发生了什么。

我之前见过别人有这个问题,但我还没有看到任何令人满意的答案。

谢谢!

1 个答案:

答案 0 :(得分:0)

更改consiguePath以从URL

返回结果getResource
public static URL consiguePath(int i) {

    return AppUtils.class.getClass().getResource("/Movimiento/" + mapa.get(i));

}

然后使用它InputStream传递给Player

try {
    URL url = AppUtils.consiguePath(12);
    Player player = new Player(url.openStream());
    player.play();
} catch (JavaLayerException | IOException e) {
    e.printStackTrace();
}

同样,您可以使用Class#getResourceAsStream

资源被打包到您的Jar文件中,不再被视为File s