Javafx MediaException:MEDIA\u不可用的jar文件

Javafx MediaException:MEDIA\u不可用的jar文件,javafx,jar,media,Javafx,Jar,Media,当我为maven项目创建一个jar包时,程序再也找不到我的媒体文件了。我从谷歌上找到了几个类似的问题,但没有一个对我有帮助 我已经尝试了所有这些选项: 文档库:在IDE上工作正常,jar包抛出媒体\u不可用 path.get:在IDE上工作正常,jar包抛出媒体\u不可用 获取资源:抛出null Inputstream:抛出空值 带有getClassLoader()的Inputstream:抛出null 我示例中的Audio类是一个抽象类,它通过静态方法和变量处理一切。我正在使用Java11 编

当我为maven项目创建一个jar包时,程序再也找不到我的媒体文件了。我从谷歌上找到了几个类似的问题,但没有一个对我有帮助

我已经尝试了所有这些选项:

  • 文档库:在IDE上工作正常,jar包抛出媒体\u不可用
  • path.get:在IDE上工作正常,jar包抛出媒体\u不可用
  • 获取资源:抛出null
  • Inputstream:抛出空值
  • 带有getClassLoader()的Inputstream:抛出null
  • 我示例中的Audio类是一个抽象类,它通过静态方法和变量处理一切。我正在使用Java11

    编辑:
    为示例添加了正确的路径。

    我可以使用以下路径修复它:

    Media media = new Media(Audio.class.getResource("/music/music.mp3").toString());
    
    因为我的文件在资源文件夹中的“音乐”文件夹中,所以我也必须包含它。还要注意,“music/music.mp3”不起作用,它需要在前面加斜杠。这是相当混乱的,因为在向项目添加图像时,它不需要斜杠


    感谢@fabian解释了为什么我的方法不起作用。

    mp3文件在classpath/jar中的什么位置结束?根据您使用的ide的不同,部署后mp3或音乐可能是正确的路径(方法3),或者文件可能不包含在内。此外,假设您使用的系统文件名不区分大小写,使用错误的大小写可能会导致此问题;jar条目是区分大小写的,即使在windows上也是如此……顺便说一句:请忘记方法4和5(或者更好地记住它们不起作用):使用
    Object
    toString
    实现,这意味着结果类似于
    java.io.InputStreamReader@
    Media media = new Media(Paths.get("src/main/resources/music/music.mp3").toUri().toString());
    
    Media media = new Media(Audio.class.getResource("/music.mp3").toString());
    
    InputStream in = Audio.class.getResourceAsStream("/music.mp3");
    Media media = new Media(new InputStreamReader(in).toString());
    
    InputStream in = Audio.class.getClassLoader().getResourceAsStream("/music.mp3");
    Media media = new Media(new InputStreamReader(in).toString());
    
    Media media = new Media(Audio.class.getResource("/music/music.mp3").toString());