You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4上JavaFX播放MP3遇MediaException问题求助

树莓派4 JavaFX MP3播放器「Could not create player!」问题解决

问题场景

在树莓派4上开发MP3播放器,因默认OpenJDK不含JavaFX,选用了自带JavaFX的Bellsoft/Liberica Java 13。但执行以下代码时触发MediaException: Could not create player!错误:

media = new Media("path/to/mp3-file");
MediaPlayer mp = new MediaPlayer(media);

完整报错栈:

Exception in Application init method
java.lang.reflect.InvocationTargetException
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.base/java.lang.reflect.Method.invoke(Method.java:567)
 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.base/java.lang.reflect.Method.invoke(Method.java:567)
 at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application init method
 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:895)
 at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
 at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player!
 at javafx.media/javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146)
 at javafx.media/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:518)
 at javafx.media/javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:421)
 at sample.FX_Player.init(FX_Player.java:86)
 at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:824)
 ... 2 more
Caused by: com.sun.media.jfxmedia.MediaException: Could not create player!
 at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:295)
 at javafx.media/com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118)
 at javafx.media/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:474)
 ... 5 more
Exception running application sample.FX_Player

已尝试多种路径格式均无效:

file:///home/pi/test.mp3
file:/home/pi/test.mp3
/home/pi/test.mp3

解决方案

1. 补全系统音频依赖库

树莓派上的JavaFX媒体组件依赖底层GStreamer解码库,Liberica自带的JavaFX可能未打包ARM架构对应的本地库,执行以下命令安装缺失依赖:

sudo apt-get install libopenjfx-java libopenjfx-jni gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav

2. 用File类生成合法URL

避免手动拼接路径的格式错误,通过File类自动生成符合规范的URI:

File mp3File = new File("/home/pi/test.mp3");
Media media = new Media(mp3File.toURI().toString());
MediaPlayer mp = new MediaPlayer(media);

3. 验证MP3文件有效性

先确认媒体文件本身无损坏,用树莓派自带播放器测试:

omxplayer /home/pi/test.mp3

如果无法播放,更换正常的MP3文件重试。

4. 显式指定JavaFX模块路径

若Liberica的JavaFX模块加载异常,启动程序时手动指定模块路径(替换为你的Liberica Java路径):

java --module-path /opt/liberica-jdk-13/lib --add-modules javafx.media sample.FX_Player

5. 切换至OpenJFX ARM版本

若以上方法无效,可替换为OpenJFX官方ARM版:

  • 下载对应ARM架构的OpenJFX SDK
  • 启动时指定模块路径与媒体模块运行程序

内容的提问来源于stack exchange,提问作者Дмитрий

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:01:13