我做了这个小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
更改为返回getResource
的结果URL
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