Java 系统找不到JAR中指定的路径

Java 系统找不到JAR中指定的路径,java,file,audio,jar,path,Java,File,Audio,Jar,Path,我正在播放一个音频文件。在我的IDE(intellij)中,它工作得很好,但是在JAR中运行时,我得到错误java.io.FileNotFoundException:D:\soni801\Documents\Redsea Productions\the Great X Wars\alpha-0.0.7.1.JAR\audio\click.au(系统找不到指定的路径) 文件在JAR中的位置是audio/click.au,JAR位于D:\soni801\Documents\Redsea Produc

我正在播放一个音频文件。在我的IDE(intellij)中,它工作得很好,但是在JAR中运行时,我得到错误
java.io.FileNotFoundException:D:\soni801\Documents\Redsea Productions\the Great X Wars\alpha-0.0.7.1.JAR\audio\click.au(系统找不到指定的路径)

文件在JAR中的位置是
audio/click.au
,JAR位于
D:\soni801\Documents\Redsea Productions\The Great X Wars\alpha-0.0.7.1.JAR
哪个afaik应该创建绝对路径
D:\soni801\Documents\Redsea Productions\The Great X Wars\alpha-0.0.7.1.JAR\audio\click.au
,但是,系统在此位置找不到文件?这里发生了什么事

这是我的
AudioPlayer.java
文件中的代码:

AudioInputStream-inputStream=AudioSystem.getAudioInputStream(新文件(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()/*+“/res”*/+filePath).getAbsoluteFile());
Clip Clip=AudioSystem.getClip();
clip.open(输入流);
或者,您可以在上找到整个文件以及项目的其余部分

感谢所有的帮助

我知道这可能是其他问题的重复,但不幸的是,其他解决方案并没有解决我的问题


如果问题不清楚,请评论我可以做的任何改进,我将编辑问题音频系统。getAudioInputStream方法过载,可以接受
文件、
URL
InputStream
作为参数。其中,
URL
通常是最佳选择

文件
相比,它的优势在于
URL
可以在jar中寻址文件,而
文件
无法寻址

InputStream
相比,它的优势在于附加了一些条件:音频文件必须支持
mark
reset
方法。我对音频文件的经验是,这是一种命中或未命中,无论这是否可能。我承认我不知道具体原因

要从jar获取URL,最简单的形式可能是:

URL url = this.getClass().getResource("yourAudioFileName");
这假设音频资源与类“This”位于同一个包中。包的子文件夹也可以通过这种方式寻址。但我认为不能指望符号“./”从父文件夹获取资源


或者,您可以在音频资源的包或父包中指定类,而不是“this”。此外,您还可以在地址前面加“/”前缀。在最后一种情况下,例如,
this.getClass().getResource(/yourAudioFileName”)
,项目的根源文件夹是地址的起点,而不是包含“this”的包。

请参见现在获取的
java.lang.ClassCastException:java.io.BufferedInputStream不能转换为javax.sound.sampled.AudioInputStream