Jar没有玩家异常

时间:2014-01-19 04:31:40

标签: java exception audio audio-player getresource

我试图使用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)

1 个答案:

答案 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

祝你好运!