如何判断JavaFX MediaPlayer何时完成音频播放?
JavaFX中监听媒体播放完毕的方案
嘿,我之前也踩过这个坑!用mediaPlayer.getStatus().equals(Status.PLAYING)判断播放状态确实不太靠谱,有时候播放结束后状态不会立刻更新,导致判断出错。好在JavaFX专门提供了和Android OnCompletionListener功能一致的监听机制——**setOnEndOfMedia()**方法。
具体用法示例
你可以直接给MediaPlayer设置播放完毕的回调逻辑,用来同步你的布尔状态:
// 假设你有个布尔变量标记播放状态 private boolean isMusicPlaying = false; // 初始化MediaPlayer时绑定回调 mediaPlayer.setOnEndOfMedia(() -> { // 播放完毕后更新状态 isMusicPlaying = false; // 这里还可以加其他逻辑,比如自动切歌、显示播放完成提示等 System.out.println("当前歌曲播放完毕!"); });
额外细节补充
- 这个回调会在媒体文件自然播放到末尾时触发,完全对应Android里
OnCompletionListener.onCompletion()的场景。 - 如果你的MediaPlayer设置了无限循环(比如
mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE)),这个回调不会被触发,除非你手动调用mediaPlayer.stop()或者中断播放。 - 相比依赖
getStatus()判断,用这个事件驱动的回调来同步你的布尔状态会更准确,能避免状态更新延迟带来的判断误差。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

