Java 文件在eclipse中找到,但在终端中运行.jar时没有找到

Java 文件在eclipse中找到,但在终端中运行.jar时没有找到,java,cmd,filesystems,Java,Cmd,Filesystems,我有一个程序,必须从终端接口播放声音 代码相当简单,如下所示: public static synchronized void playSound() { new Thread(new Runnable() { public void run() { File _file = new File("music/sound.wav"); try (AudioInputStream _audio = AudioSystem

我有一个程序,必须从终端接口播放声音

代码相当简单,如下所示:

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)
[编辑]音频文件确实打包到了.jar中,但仍然无法工作

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

谢谢,
SilverDuck

当文件打包成jar文件时,它不再是文件。需要将其作为资源读取。试着像这样修改代码

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

尝试不将音乐打包到jar中,将其放在旁边,或者将打包的文件作为资源加载

例如,见


这里可能有一个更好的解释。

相对于您运行它的位置,这个音乐文件夹在哪里?您的问题是相对文件路径music/sound.wav。我想,当您创建了jar时,您还没有在jar中包含音频文件。当然,您可以使用所需的资源构建jar,但是为什么不让应用程序接受文件路径作为输入呢?然后,您可以在运行jar时提供完整的路径,它可以提取文件。这样,你可以播放你提供的任何文件。音乐文件夹被捆绑到jar文件中,这就是我不明白的原因。当我不捆绑它时,我有另一个错误,说路径不存在。嗯,奇怪。文件分隔符没有什么奇怪的地方,是吗?代码中有music/sound.wav,但错误消息中有music\sound.wav。是的,java使用/作为分隔符,windows\,但我认为jvm会处理它。是的,我已经处理了,但它仍然无法工作。如果我用一个zip管理器打开.jar,我可以看到文件应该是什么样子。@SilverDuck很高兴,这很有帮助:你能接受答案吗?