JavaFX Media – pause(); 方法使MediaPlayer快进?
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
时,媒体仍会在statusProperty更改时正常播放和停止):
暂停播放器。 实际暂停播放器后,状态将设置为MediaPlayer.Status.PAUSED。
因此测量并不是真正相关的,因为当你得到当前时间时Duration d1 = player.getCurrentTime();
在暂停之前,播放实际上并没有暂停,当你在pause
调用后得到当前时间时, Duration d2 = player.getCurrentTime();
是不正确的,因为pause
已经异步执行,因此在d2
video停止播放时没有任何保证:
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
的时间,但是如果您愿意,可以使用搜索方法。