我试图使用MP3而不是wavs,它在NetBeans中运行良好,但是当我构建它并尝试运行jar时,没有声音,我得到了NoPlayerException。
background = ImageIO.read(getClass().getResourceAsStream("/background1.png"));
sun = ImageIO.read(getClass().getResourceAsStream("/sun.png"));
cloud = ImageIO.read(getClass().getResourceAsStream("/cloud.png"));
pause = ImageIO.read(getClass().getResourceAsStream("/pause.png"));
soldierchant = AudioSystem.getAudioInputStream(getClass().getResource("/SoldiersChant.wav"));
thebreach = AudioSystem.getAudioInputStream(getClass().getResource("/TheBreach.wav"));
forever = AudioSystem.getAudioInputStream(getClass().getResource("/Forever.wav"));
Format input1 = new AudioFormat(AudioFormat.MPEGLAYER3);
Format input2 = new AudioFormat(AudioFormat.MPEG);
Format output = new AudioFormat(AudioFormat.LINEAR);
PlugInManager.addPlugIn("com.sun.media.codec.audio.mp3.JavaDecoder", new Format[]{input1, input2}, new Format[]{output}, PlugInManager.CODEC);
try {
Player player = Manager.createPlayer(new MediaLocator(getClass().getResource("/TheBreach.mp3").toURI().toURL()));
player.start();
} catch (IOException ex) {
ex.printStackTrace();
}catch (java.net.URISyntaxException x) {
x.printStackTrace();
}catch (javax.media.NoPlayerException c) {
c.printStackTrace();
}
正如您所看到的,我正在使用getResource获取文件,就像在NetBeans和jar中都可以使用的图像和wav一样。这可能是问题com.sun.media.codec.audio.mp3.JavaDecoder
此时我正抓住稻草。我已经尝试将MP3放在每个文件夹中,并且没有/和完整目录。
这是我的例外getMessage
:
无法找到jar的播放器:file:/ C:/Users/Patrick/Documents/NetBeansProjects/PatBuild8FX/dist/PatBuild8FX.jar!/TheBreach.mp3
我认为它是Manager.createPlayer
,因为当我单独创建文件时它很好,但当我尝试使用它创建一个播放器时,它不起作用。
File m = new File("file:/C:/Users/Patrick/Documents/NetBeansProjects/PatBuild8FX/dist/PatBuild8FX.jar/TheBreach.mp3");
System.out.println(m);
System.out.println(Manager.createPlayer(m.toURI().toURL()));
file:\C:\Users\Patrick\Documents\NetBeansProjects\PatBuild8FX\dist\PatBuild8FX.jar\TheBreach.mp3
java.io.IOException: File Not Found
java.io.IOException: File Not Found
Exception in thread "main" javax.media.NoPlayerException: Error instantiating class: com.sun.media.protocol.file.DataSource : java.io.IOException: File Not Found
at javax.media.Manager.createPlayerForContent(Manager.java:1362)
at javax.media.Manager.createPlayer(Manager.java:417)
at javax.media.Manager.createPlayer(Manager.java:332)
at Build8.PanGame.<init>(PanGame.java:75)
at Build8.Main.main(Main.java:30)
答案 0 :(得分:0)
您是否将'TheBreach.mp3'文件打包到jar文件中?上面的异常消息表明正在从jar文件中访问资源。
我的建议:
如果您还没有这样做,请将.mp3文件打包到jar文件中(这使您可以更轻松地移动单个jar文件,而无需同时复制.mp3文件,并且现在也可以从jar文件中访问mp3文件)或
如果您希望将.mp3文件放在原处,那么在传递给java.io.File
构造函数之前,请尝试使用MediaLocator
类加载mp3文件。因此,你会有类似的东西:
new MediaLocator(new File("file:///C:\\full_path_to_the_file\\TheBreach.mp3").toURL())
最后,解释创建玩家问题的MediaLocator.createPlayer()
文档应该很方便。你可以找到它here