Jar没有玩家异常

问题描述 投票:0回答:1

我试图使用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)
java exception audio audio-player getresource
1个回答
0
投票

您是否将'TheBreach.mp3'文件打包到jar文件中?上面的异常消息表明正在从jar文件中访问资源。

我的建议:

  • 如果您还没有这样做,请将.mp3文件打包到jar文件中(这使您可以更轻松地移动单个jar文件而无需复制.mp3文件,而且mp3文件现在也应该可以从jar文件访问),或
  • 如果您希望.mp3文件所在的位置,请尝试使用java.io.File类加载mp3文件,然后再传递给MediaLocator构造函数。因此,你会有类似的东西:new MediaLocator(new File("file:///C:\\full_path_to_the_file\\TheBreach.mp3").toURL())
  • 最后,MediaLocator.createPlayer()解释创建玩家问题的文档应该很方便。你可以找到它here

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.