JavaFX Media – pause(); 方法使MediaPlayer快进?

MediaPlayerpause()方法使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时,媒体仍会在statusProperty更改时正常播放和停止):

暂停播放器。 实际暂停播放器后,状态将设置为MediaPlayer.Status.PAUSED。

因此测量并不是真正相关的,因为当你得到当前时间时Duration d1 = player.getCurrentTime(); 在暂停之前,播放实际上并没有暂停,当你在pause调用后得到当前时间时, Duration d2 = player.getCurrentTime(); 是不正确的,因为pause已经异步执行,因此在d2video停止播放时没有任何保证:

MediaPlayer的操作本质上是异步的。

在播放停止时获得正确时间的方法是使用例如setOnPaused观察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())); 

样本输出:

 Paused at: 1071.0203000000001 ms Player will start at: 1071.0203000000001 ms Paused at: 2716.7345 ms Player will start at: 2716.7345 ms 

注意:但是,如果您只是想要停止和播放,则不需要设置MediaPlayer的时间,但是如果您愿意,可以使用搜索方法。