javafxmedia-pause();方法让MediaPlayer快进?
javafxmedia-pause();方法让MediaPlayer快进?,java,javafx,media,pause,Java,Javafx,Media,Pause,MediaPlayer的pause()方法使Media稍微“搜索”。 这真的很烦人,但我没有找到问题所在 private void playPauseClicked() { Status currentStatus = player.getStatus(); if(currentStatus == Status.PLAYING) { Duration d1 = player.getCurrentT
MediaPlayer
的pause()
方法使Media
稍微“搜索”。
这真的很烦人,但我没有找到问题所在
private void playPauseClicked()
{
Status currentStatus = player.getStatus();
if(currentStatus == Status.PLAYING)
{
Duration d1 = player.getCurrentTime(); //To measure the difference
player.pause();
Duration d2 = player.getCurrentTime();
VIDEO_PAUSED = true;
}
else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED)
{
player.play();
VIDEO_PAUSED = false;
}
}
结果不清楚,点d1和点d2之间相差约200-400ms
当然,在暂停媒体后,我试图将播放机恢复到d1,但没有成功,恢复媒体后的结果也是一样
提前感谢您的建议:)这是因为该方法不会立即停止播放(当调用pause
时,媒体仍会在更改时播放并停止):
暂停播放器一旦玩家实际暂停,状态将
设置为MediaPlayer。状态。暂停。
因此,测量值并不真正相关,因为当您获得当前时间Duration d1=player.getCurrentTime()时代码>暂停前,播放实际上没有暂停,并且在调用pause
后使用Duration d2=player.getCurrentTime()获得当前时间时播放代码>不正确,因为已异步执行暂停
,因此在d2
处没有停止播放视频的警告:
MediaPlayer的操作本质上是异步的
要在停止播放时获得正确的时间,您可以使用例如观察MediaPlayer
状态的变化
示例:
private void playPauseClicked() {
Status currentStatus = player.getStatus();
if(currentStatus == Status.PLAYING)
player.pause();
else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED) {
System.out.println("Player will start at: " + player.getCurrentTime());
player.play();
}
}
player.setOnPaused(() -> System.out.println("Paused at: " + player.getCurrentTime()));
样本输出:
注意:但是,如果您只想停止播放,则不需要设置MediaPlayer的时间,但如果您想停止播放,则可以使用该方法。这是因为该方法不会立即停止播放(当调用pause
时,媒体仍会在更改时播放并停止):
暂停播放机。一旦播放机实际暂停,状态将更改
设置为MediaPlayer。状态。暂停。
因此,这些测量值实际上并不相关,因为当您在暂停之前获得当前时间Duration d1=player.getCurrentTime();
时,播放实际上并未暂停,而且当您在调用pause
后获得当前时间时,Duration d2=player.getCurrentTime();
不正确,因为暂停
已异步执行,因此在d2
处没有停止播放视频的警告:
MediaPlayer的操作本质上是异步的
要在停止播放时获得正确的时间,您可以使用例如观察MediaPlayer
状态的变化
示例:
private void playPauseClicked() {
Status currentStatus = player.getStatus();
if(currentStatus == Status.PLAYING)
player.pause();
else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED) {
System.out.println("Player will start at: " + player.getCurrentTime());
player.play();
}
}
player.setOnPaused(() -> System.out.println("Paused at: " + player.getCurrentTime()));
样本输出:
注意:不过,如果您只想停下来玩,不需要设置MediaPlayer的时间,但如果您想玩,可以使用该方法。哇,太棒了!我看了很多视频,一直在阅读,想知道如何做……非常感谢!感谢您的帮助。哇,太棒了!我看了很多视频我们一直在阅读如何做到这一点…非常感谢!感谢您的帮助。