【问题标题】:JavaFX finds media file in JAR, but won't play it?JavaFX 在 JAR 中找到媒体文件,但不会播放?
【发布时间】:2018-08-21 02:55:45
【问题描述】:

我的项目在Eclipse中播放音频文件很好,但是当我打包成JAR文件时,打包在JAR中的音频文件无法播放。

奇怪的是,JavaFX 似乎可以很好地找到该文件。

我这样实例化播放器:

    myClass.mediaPlayer = new MediaPlayer(new Media(
            myClass.getClass().getResource("/audio/file.wav").toString()));

我的调试字符串如下所示:

    System.out.println(mediaPlayer.getMedia().getDuration() + " "
                       mediaPlayer.getMedia().getSource())

在 Eclipse 中它工作正常并显示文件 URL:

358.049887 ms file:/home/username/path/to/project/bin/audio/file.wav 

从 JAR 运行时,它会显示 JAR URL:

358.049887 ms jar:file:/home/username/path/to/project.jar!/audio/file.wav

所以它一定是在定位文件,因为它在从 JAR 运行时正确地报告了持续时间,但它不播放,也没有抛出异常。我还注意到播放器似乎永远不会进入“READY”状态。

我正在用我的 JAR 文件打包一个独立的 JRE,但我在 eclipse 和 JAR 打包 (1.8.0_92) 中使用相同版本的 Java。

我还注意到,我使用相同的 getClass().getResource() 方法来加载与应用程序一起打包的按钮图标,并且在 eclipse 和 JAR 中都可以正常工作。

【问题讨论】:

  • 我没有这个问题的答案,但是对于像这样的简短声音,您应该考虑使用AudioClip 而不是创建MediaPlayer
  • 谢谢!如果我只是用 AudioClip 替换 MediaPlayer,一切都会按预期进行!这是否意味着 MediaPlayer 中一定存在错误? (至少在我使用的旧版本中?)
  • 我不知道...这似乎是一个错误。 MediaPlayer 可能在开始播放和实际渲染媒体(包括声音)之间存在一些延迟,以便在媒体播放器正确启动之前完成短声音。不过,这似乎有点不太可能。但无论如何,AudioClip 是产生此功能的预期方式。
  • 嗯...但只有在通过 JAR 加载时?我提到这一点只是因为它在 eclipse 中加载(通过相同的方法)时可以正常播放。或者当从 jar 运行的程序通过非 jar 路径从文件系统加载它时。无论如何,感谢您的帮助!
  • 是的,不确定。从 jar 文件中提取媒体比直接从文件系统中提取媒体需要更长的时间,因此如果存在时间问题,这是可能的。但是,我认为这是一个错误。功能不应该依赖于这样的东西。不管怎样,看来你还有前进的路。

标签: java eclipse javafx javafx-2 executable-jar


【解决方案1】:

我不知道这是否是一个错误;好像是一个。

但是,播放短音的预期方法是使用AudioClip,而不是MediaPlayer。这是一个更轻量级的类,适用于非常短的声音文件。

【讨论】:

  • 我的 Eclipse JAR 文件播放 AudioClip 声音时遇到问题。在包资源管理器中刷新我的资源文件夹对我有用。想在这里提一下,以防将来其他人遇到类似问题。
猜你喜欢
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多