JavaFX MediaPlayer暂停后setRate设置的速率失效,如何维持指定播放速率?
解决JavaFX MediaPlayer暂停后无法保持播放速率的问题
针对你遇到的问题:设置播放速率为2后暂停,再次调用play()时,getRate()返回值仍为2,但实际播放速率回到1的情况,可以通过以下两种方法解决:
方法一:播放前重新设置当前速率
在每次调用play()恢复播放前,主动重新设置一次当前的速率值,强制播放器使用设定的速率:
// 暂停后恢复播放的逻辑 player.setRate(player.getRate()); // 重新应用当前存储的速率值 player.play();
你也可以封装成工具方法,方便复用:
private void resumePlayback(MediaPlayer player) { double currentRate = player.getRate(); player.setRate(currentRate); player.play(); }
方法二:监听播放状态自动恢复速率
通过监听MediaPlayer的statusProperty,当播放器从暂停状态切换到播放状态时,自动重新设置速率:
player.statusProperty().addListener((observable, oldStatus, newStatus) -> { if (oldStatus == MediaPlayer.Status.PAUSED && newStatus == MediaPlayer.Status.PLAYING) { player.setRate(player.getRate()); } });
这样每次从暂停恢复播放时,都会自动触发速率重置,无需手动调用额外逻辑。
说明
这个现象可能是JavaFX 24-ea版本的一个临时行为或bug,通过强制重新设置速率,可以覆盖播放器默认的恢复逻辑,确保以设定的速率继续播放。
内容的提问来源于stack exchange,提问作者Evgeny
相关产品推荐
相关产品推荐

