讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

Java如何实现一个简单的音乐播放器 JavaFX构建MP3播放器界面【附源码】

小萱大大_4752

小萱大大_4752

发布时间:2026-01-21 05:47:10

|

727人浏览过

|

来源于php中文网

原创

JavaFX MediaPlayer 播 MP3 需解决四大问题:① Java 11+ 需显式引入 javafx-media 和 javafx-controls 模块并配置启动参数;② Media 路径必须用 file.toURI().toString() 转合法 URI;③ UI 更新须用 Platform.runLater();④ Linux/macOS 需安装 GStreamer 插件支持 MP3 解码。

java如何实现一个简单的音乐播放器 javafx构建mp3播放器界面【附源码】

JavaFX 自带的 MediaPlayer 和 MediaView 能播 MP3,但实际用起来会卡在几个关键点上:路径加载失败、UI 线程阻塞、进度条不同步、以及 Java 11+ 默认移除了 JavaFX 模块导致编译报错。下面直奔实操。

JavaFX 项目必须显式引入模块和依赖

Java 11 及以后版本不再内置 JavaFX,哪怕你装了 JDK,javafx.scene.media 也会报红。Maven 项目需在 pom.xml 中添加:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-media</artifactId>
    <version>20</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>20</version>
</dependency>

同时启动命令要加模块参数,例如:

java --module-path %PATH_TO_JAVAFX% --add-modules javafx.controls,javafx.media -jar MusicPlayer.jar
  • Windows 下 %PATH_TO_JAVAFX% 是解压后的 lib 目录绝对路径
  • IntelliJ 用户需在 Run Configuration → VM Options 里手动填入模块参数
  • 不加 --add-modules javafx.media,MediaPlayer 类根本加载不到,会抛 NoClassDefFoundError

Media 构造时路径必须是合法 URI,不能直接用相对路径字符串

写成 new Media("song.mp3") 几乎必失败——Media 构造函数只接受 URI 字符串,且对空格、中文、特殊字符极其敏感。正确做法是:

立即学习“Java免费学习笔记(深入)”;

Windows 图片打印
Windows 图片打印

通过 Python 使用 mspaint /pt 在 Windows 上打印图像——绕过 bash 中文路径编码问题。

下载
  • 用 Paths.get("song.mp3").toUri().toString() 转换本地路径
  • 确保文件存在且有读权限(尤其 macOS/Linux 下注意路径大小写)
  • 避免使用 getClass().getResource() 加载资源,它返回 null 时不会报错,只会静默失败

示例代码片段:

File file = new File("music/sample.mp3");
if (file.exists()) {
    String uri = file.toURI().toString();
    Media media = new Media(uri); // ✅ 正确
    MediaPlayer player = new MediaPlayer(media);
}

播放控制必须用 Platform.runLater() 更新 UI 元素

MediaPlayer 的事件回调(如 setOnPlaying、setOnStopped)运行在后台线程,直接操作 Button.setText() 或 Slider.setValue() 会触发 IllegalStateException: Not on FX application thread。

  • 所有 UI 更新必须包在 Platform.runLater(() -> { ... }) 里
  • 进度条同步推荐用 Timeline 定期拉取 player.getCurrentTime(),而不是监听时间变化事件(该事件不保证实时)
  • 暂停/恢复后,getCurrentTime() 返回的是暂停时刻的时间戳,不是总时长百分比,需手动计算:player.getCurrentTime().toSeconds() / player.getTotalDuration().toSeconds()

MP3 解码依赖系统原生库,Linux/macOS 需额外安装 GStreamer 插件

Windows 上 JavaFX 内置了 MP3 支持,但 Linux(如 Ubuntu)和 macOS 默认无法播放 MP3,会静默失败或抛 MediaException: Could not create player。

  • Ubuntu/Debian:安装 gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
  • macOS:用 Homebrew 安装 gstreamer gst-plugins-bad gst-plugins-ugly
  • 验证方式:运行 gst-inspect-1.0 mpgaudioparse,有输出即插件就位
  • 如果仍不行,可临时改用 WAV 格式测试逻辑——它不依赖额外插件

真正卡住人的从来不是“怎么写播放按钮”,而是路径转 URI 的细节、模块参数漏写、跨平台解码缺失这三处。跑通前先确认 JavaFX 模块加载成功、MP3 文件能被 URI 定位、GStreamer 插件已就位——其余都是常规 UI 交互逻辑。

相关文章

PotPlayer播放器
PotPlayer播放器

potplayer是一款功能全面的视频播放器,支持各种格式的音频文件,内置了非常强大的解码器功能,能够非常流畅的观看,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

4560

2025.09.15

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

389

2026.05.09

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5044

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6557

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2622

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1898

2023.08.03

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn