Ubuntu 23.10下JavaFX创建MP3 MediaPlayer失败求助
问题:JavaFX播放MP3报错,WAV文件正常播放
代码示例
public class HelloWorld extends Application { @Override public void start(Stage primaryStage) { // String audioFilePath = "AudioFileWithWavFormat.wav"; String audioFilePath = "AudioFileWithMp3Format.mp3"; String url = getClass().getClassLoader().getResource(audioFilePath).toExternalForm(); Media media = new Media(url); MediaPlayer mp3Player = new MediaPlayer(media); mp3Player.setOnPlaying(() -> System.out.println("Playback started")); mp3Player.play(); StackPane root = new StackPane(); Scene scene = new Scene(root, 300, 250); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
错误日志
MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player! at javafx.media@21/javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:147) at javafx.media@21/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:518) at javafx.media@21/javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:421) at ca.footeware.javafx.squeaker/ca.footeware.javafx.squeaker.HelloWorld.start(HelloWorld.java:25) at javafx.graphics@21/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839) at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483) at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at javafx.graphics@21/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455) at javafx.graphics@21/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at javafx.graphics@21/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at javafx.graphics@21/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$10(GtkApplication.java:263) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: com.sun.media.jfxmedia.MediaException: Could not create player! at javafx.media@21/com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:298) at javafx.media@21/com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118) at javafx.media@21/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:474)
系统环境
❯ neofetch .-/+oossssoo+/-. craig@notebook `:+ssssssssssssssssss+:` -------------- -+ssssssssssssssssssyyssss+- OS: Ubuntu 23.10 x86_64 .ossssssssssssssssssdMMMNysssso. Host: XPS 13 9310 /ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 6.5.0-14-generic +ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 59 mins /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 2388 (dpkg), 55 (flatpak), 17 (snap) .ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.2.15 +sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 3456x2160 ossyNMMMNyMMhsssssssssssssshmmmhssssssso DE: GNOME 45.1 ossyNMMMNyMMhsssssssssssssshmmmhssssssso WM: Mutter +sssshhhyNMMNyssssssssssssyNMMMysssssss+ WM Theme: Adwaita .ssssssssdMMMNhsssssssssshNMMMdssssssss. Theme: Yaru-sage-dark [GTK2/3] /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/ Icons: Yaru-sage [GTK2/3] +sssssssssdmydMMMMMMMMddddyssssssss+ Terminal: gnome-terminal /ssssssssssshdmNNNNmyNMMMMhssssss/ CPU: 11th Gen Intel i7-1195G7 (8) @ 5.000GHz .ossssssssssssssssssdMMMNysssso. GPU: Intel TigerLake-LP GT2 [Iris Xe Graphics] -+sssssssssssssssssyyyssss+- Memory: 6506MiB / 15692MiB `:+ssssssssssssssssss+:` .-/+oossssoo+/-.
❯ java -version openjdk version "21.0.1" 2023-10-17 OpenJDK Runtime Environment (build 21.0.1+12-Ubuntu-223.10) OpenJDK 64-Bit Server VM (build 21.0.1+12-Ubuntu-223.10, mixed mode, sharing)
已尝试操作
- 安装了
ubuntu-restricted-extras、libavcodec60、libavformat60及ffmpeg - 系统自带的Rhythmbox和Audacious播放器可正常播放MP3文件
- 从Gluon官网下载了v21.0.1的JavaFX SDK及模块,在NetBeans中引用,通过POM构建模块并使用JLink生成运行时,目前主要在NetBeans中运行代码
解决方案建议
- 安装GStreamer相关插件
JavaFX媒体模块依赖系统的GStreamer组件,Ubuntu下需确保安装MP3解码所需的插件:
sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
- 确认JavaFX媒体模块依赖配置
检查POM文件中是否正确引入了Linux平台的JavaFX媒体依赖:
<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-media</artifactId> <version>21.0.1</version> <classifier>linux</classifier> </dependency>
- JLink运行时包含媒体模块
在POM的JLink插件配置中,明确加入javafx.media模块,避免生成的运行时遗漏该模块:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jlink-plugin</artifactId> <version>3.1.0</version> <configuration> <modules> <module>javafx.media</module> <!-- 其他需要的模块 --> </modules> </configuration> </plugin>
- 尝试使用系统自带JavaFX库
卸载手动下载的Gluon JavaFX,转而安装Ubuntu官方提供的JavaFX包:
sudo apt install openjfx openjfx-media
然后在NetBeans中配置使用系统JavaFX库,测试MP3播放功能。
内容的提问来源于stack exchange,提问作者CraigFoote
相关产品推荐
相关产品推荐

