我的 .jar 文件无法打开 MP3 文件(我正在使用 Jlayer - JZoom 库)
My .jar file won't open MP3 files (I'm using Jlayer - JZoom library)
我做了这个小 Java 项目,它可以依次打开不同的 MP3 文件。为此,我下载了 JLayer 1.0.1 库并将其添加到我的项目中。我还将 MP3 文件以及一些 JPG 图像添加到我的项目的一个包中,以便从那里获取它们,我正在使用 hashmap (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 文件实际上都在那里,所以我不知道可能发生了什么。
之前看到别人遇到过这个问题,但是还没看到满意的答案。
谢谢!
将 consiguePath
更改为 return 结果 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
我做了这个小 Java 项目,它可以依次打开不同的 MP3 文件。为此,我下载了 JLayer 1.0.1 库并将其添加到我的项目中。我还将 MP3 文件以及一些 JPG 图像添加到我的项目的一个包中,以便从那里获取它们,我正在使用 hashmap (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 文件实际上都在那里,所以我不知道可能发生了什么。
之前看到别人遇到过这个问题,但是还没看到满意的答案。
谢谢!
将 consiguePath
更改为 return 结果 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