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的时间,但如果您想玩,可以使用该方法。

哇,太棒了!我看了很多视频,一直在阅读,想知道如何做……非常感谢!感谢您的帮助。哇,太棒了!我看了很多视频我们一直在阅读如何做到这一点…非常感谢!感谢您的帮助。