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

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中运行代码

解决方案建议

  1. 安装GStreamer相关插件
    JavaFX媒体模块依赖系统的GStreamer组件,Ubuntu下需确保安装MP3解码所需的插件:
sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
  1. 确认JavaFX媒体模块依赖配置
    检查POM文件中是否正确引入了Linux平台的JavaFX媒体依赖:
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-media</artifactId>
    <version>21.0.1</version>
    <classifier>linux</classifier>
</dependency>
  1. 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>
  1. 尝试使用系统自带JavaFX库
    卸载手动下载的Gluon JavaFX,转而安装Ubuntu官方提供的JavaFX包:
sudo apt install openjfx openjfx-media

然后在NetBeans中配置使用系统JavaFX库,测试MP3播放功能。


内容的提问来源于stack exchange,提问作者CraigFoote

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:25:55