Java Jar没有玩家例外

Java Jar没有玩家例外,java,exception,audio,audio-player,getresource,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(

我试着用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的播放器/Thebreak.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)

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

我的建议是:

如果您还没有这样做,请将.mp3文件打包到jar文件中,这样可以更轻松地移动单个jar文件,而不必同时复制.mp3文件,而且现在可以从jar文件访问mp3文件,或者

如果希望将.mp3文件放在原来的位置,请尝试使用java.io.file类加载mp3文件,然后再将其传递给MediaLocator构造函数。因此,您将得到如下结果: 新媒体定位器新媒体定位器ilefile:///C:\\文件\\thebreak.mp3.tour的完整路径

最后,MediaLocator.createPlayer的文档解释了创建播放器的问题,应该很方便。你可以找到它


祝你好运

只使用这个新的MediaLocatorgetClass.getResource/TheBreak.mp3进行尝试看起来问题出在Manager.createPlayer上。请参阅编辑。我已经在用罐子包装mp3了,我用WinRAR打开罐子,它就在里面。完整目录不起作用。