【问题标题】:Javafx MediaException: MEDIA_UNAVAILABLE jar fileJavafx MediaException:MEDIA_UNAVAILABLE jar 文件
【发布时间】:2020-04-09 04:42:14
【问题描述】:

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

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

  1. 文档库:在 IDE 上运行良好,jar 包抛出 MEDIA_UNAVAILABLE
// I get documentBase from the class which extends Application
String documentBase = Application.getHostServices().getDocumentBase();
Media media = new Media(documentBase + "src/main/resources/music/music.mp3");
  1. Paths.get:在 IDE 上运行良好,jar 包抛出 MEDIA_UNAVAILABLE
Media media = new Media(Paths.get("src/main/resources/music/music.mp3").toUri().toString());
  1. 获取资源:抛出 null
Media media = new Media(Audio.class.getResource("/music.mp3").toString());
  1. 输入流:抛出 null
InputStream in = Audio.class.getResourceAsStream("/music.mp3");
Media media = new Media(new InputStreamReader(in).toString());
  1. 带有 getClassLoader() 的输入流:抛出 null
InputStream in = Audio.class.getClassLoader().getResourceAsStream("/music.mp3");
Media media = new Media(new InputStreamReader(in).toString());

我的示例中的 Audio 类是一个抽象类,它通过静态方法和变量处理一切。我正在使用 Java 11。

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

【问题讨论】:

  • mp3 文件在类路径/jar 中的什么位置结束?根据您使用的 ide,/resources/music.mp3/music.mp3 可能是部署后的正确路径(方法 3),或者可能不包含该文件。此外,假设您使用的是文件名不区分大小写的系统,使用错误的大小写可能会导致此问题; jar 条目区分大小写,即使在 Windows 上...
  • 顺便说一句:请忘记方法 4 和 5(或者最好记住那些不起作用):InputStreamReader 使用 ObjecttoString 实现,这意味着结果将类似于java.io.InputStreamReader@<some hex sequence>

标签: javafx jar media


【解决方案1】:

我可以通过使用这条路径来修复它:

Media media = new Media(Audio.class.getResource("/music/music.mp3").toString());

由于我的文件位于资源文件夹内的“音乐”文件夹中,因此我也必须包含它。另请注意,“music/music.mp3”不起作用,它需要在它前面加上斜线。这很令人困惑,因为在将图像添加到项目时,它不需要斜线。

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

【讨论】:

    猜你喜欢
    • 2013-06-26
    • 2021-04-24
    • 1970-01-01
    • 2013-03-24
    • 2014-11-17
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多