【问题标题】:Error Accessing Embedded Resource访问嵌入式资源时出错
【发布时间】:2012-11-04 03:08:26
【问题描述】:

我正在制作一个程序,我希望它在打开时开始播放声音。我认为最简单的方法是将 .wav 文件嵌入到我的 jar 中的 src 文件夹中。我已将该文件放在一个名为files 的打包文件中,而我使用的所有其他文件(例如图片)都在该包中,并且它们都可以正常工作。我播放声音的方法在这里:

public static void playSound(String dir, int loopTimes) throws Exception {
    URL url = new File(dir).toURI().toURL();
    Clip clip = AudioSystem.getClip();
    // getAudioInputStream() also accepts a File or InputStream
    AudioInputStream ais = AudioSystem.getAudioInputStream(url);
    clip.open(ais);
    if (loopTimes == -1)
        loopTimes = Clip.LOOP_CONTINUOUSLY;
    clip.loop(loopTimes);
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {

        }
    });
}

它适用于在我的桌面、我的文档或其他任何地方播放声音。我输入播放声音的路径是"files/FBP.wav",FBP 是文件的名称。我无法在谷歌上找到任何解决方案,我觉得这是因为它在 JAR 中。我也只是简单地尝试过:

if(new File("files/FBP.wav").exists()){
        System.out.println("EXISTS!");
    }
    System.exit(0);

它从未打印出它存在。我已经确保它也在 bin 文件夹中。我正在使用日食。我得到的错误是filenotfoundexception。任何帮助表示赞赏!提前致谢!

【问题讨论】:

    标签: java audio io embedded-resource filenotfoundexception


    【解决方案1】:

    替换:

    URL url = new File(dir).toURI().toURL();
    

    与:

    URL url = MySoundClassName.class.getClassLoader().getResource(dir);
    

    或者对于非静态方法:

    URL url = getClass().getClassLoader().getResource(dir);
    

    【讨论】:

    • 好吧,先生,您现在在所有帐户上都被宣布为巫师。现在你知道一种让它更快地缓冲东西的方法吗?由于缓冲区,运行后会有延迟。你知道怎么缩短吗?还是需要
    • @wbAnon 不是每次执行子程序时都加载剪辑,而是在全局变量中加载一次,每次调用时播放。
    • @wbAnon 好吧,如果要在 same 剪辑上一遍又一遍地调用此方法,为什么每次都一遍又一遍地加载它。如果是非静态变量,则在构造函数中加载,如果不是,在类初始化时使用static block加载,然后你想怎么玩就怎么玩。
    • 哦,我明白你的意思了。那好吧!感谢您的投入和魔法
    猜你喜欢
    • 2013-11-25
    • 2010-10-10
    • 2013-12-29
    • 2012-11-03
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多