【问题标题】:File found in eclipse but not when I run the .jar in terminal在 Eclipse 中找到文件,但在终端中运行 .jar 时没有
【发布时间】:2014-05-09 17:58:29
【问题描述】:

我有一个程序必须从终端界面播放声音。

代码相当简单,在这里:

public static synchronized void playSound() {
    new Thread(new Runnable() {
        public void run() {
            File _file = new File("music/sound.wav");

            try (AudioInputStream _audio = AudioSystem
                    .getAudioInputStream(_file)) {
                Clip _clip = AudioSystem.getClip();
                _clip.open(_audio);
                _clip.start();
            } catch ([…] e) {
                // […]
            }
        }
    }).start();        
}

该文件位于我的源路径中的音乐文件夹中。

当我在 Eclipse 中运行程序时,一切都运行良好。但是,如果我将其导出为 .jar 文件并在 windows cmd 中尝试,我会收到以下消息:

java.io.FileNotFoundException: music\sound.wav (The system cannot find the path specified)

[edit] 音频文件确实被打包进了.jar,但是还是不行。

甚至可以从 Windows 提示符中播放声音吗?如果没有,有没有这样的?

谢谢, 银鸭

【问题讨论】:

  • 这个音乐文件夹相对于你运行它的位置在哪里?
  • 您的问题是相对文件路径music/sound.wav。我想,当您创建 jar 时,您还没有在 jar 中包含音频文件。当然,您可以使用所需资源构建您的 jar,但为什么不让您的应用程序接受文件路径作为输入呢?然后,您可以在运行 jar 时提供完整路径,它可以拾取文件。这样,您可以播放您提供的任何文件。
  • music文件夹是捆绑到jar文件里的,所以我不明白。当我不捆绑它时,我有另一个错误说路径不存在。
  • 嗯,奇怪。文件分隔符没有发生什么奇怪的事情吗?你的代码有music/sound.wav,但错误消息有music\sound.wav
  • 是的,java使用/作为分隔符和windows \,但我认为jvm会处理它。

标签: java cmd filesystems


【解决方案1】:

文件打包成jar文件后,就不再是File了。它需要作为资源读取。尝试像这样更改代码

InputStream inputStream = this.getClass().getResourceAsStream("music/sound.wav");
 try (AudioInputStream _audio = AudioSystem.getAudioInputStream(inputStream)) {

【讨论】:

  • 是的,我已经这样做了,但它仍然无法正常工作。如果我用 zip 管理器打开我的 .jar,我可以看到文件应该是。
  • @SilverDuck 很高兴,它有帮助 :) 你能接受答案吗?
【解决方案2】:

尝试不将您的音乐打包到 jar 中(放在旁边)或将打包的文件作为资源加载。

例如,请参阅Java resource files

这里Loading resources (images) contained in a .Jar file or in the classpath 可能是一个更好的解释。

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2015-11-16
    • 2012-02-12
    • 2015-07-25
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2022-01-03
    • 2013-11-12
    相关资源
    最近更新 更多