暂停和播放媒体播放器 JavaFX 时的模数问题
Modulo problem in pausing and playing media player JavaFX
我的代码有问题。播放按钮需要点击 5 次才能播放电影。
我的代码是媒体播放器每 15 秒自动暂停一次。但暂停后,播放按钮需要点击 5 次才能使视频再次播放。
//auto pause every 15 seconds
int moduloTime = (int) (mediaPlayer.getCurrentTime().toSeconds() % 15);
if(moduloTime == 0){
mediaPlayer.pause();
}else{
mediaPlayer.play();
}
问题是你把时间四舍五入了。这意味着只要完整的秒数仍能被 15 整除,玩家就会一遍又一遍地停下来。您应该在某些字段中保存您停止的最后一个值,并防止您的代码在您按下继续后再次停止这一秒。
private static final String URL = ...;
private MediaPlayer mediaPlayer;
public void start(Stage primaryStage) {
Media media = new Media(URL);
mediaPlayer = new MediaPlayer(media);
mediaPlayer.currentTimeProperty().addListener(new ChangeListener<Duration>() {
private int lastStop = 0;
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
int value = (int) newValue.toSeconds();
if (lastStop != value && value % 15 == 0) {
lastStop = value; // prevent this "stop" from triggering the pause again
mediaPlayer.pause();
}
}
});
Button btn = new Button("play");
btn.setOnAction(evt -> mediaPlayer.play());
Scene scene = new Scene(new StackPane(btn), 300, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
我的代码有问题。播放按钮需要点击 5 次才能播放电影。
我的代码是媒体播放器每 15 秒自动暂停一次。但暂停后,播放按钮需要点击 5 次才能使视频再次播放。
//auto pause every 15 seconds
int moduloTime = (int) (mediaPlayer.getCurrentTime().toSeconds() % 15);
if(moduloTime == 0){
mediaPlayer.pause();
}else{
mediaPlayer.play();
}
问题是你把时间四舍五入了。这意味着只要完整的秒数仍能被 15 整除,玩家就会一遍又一遍地停下来。您应该在某些字段中保存您停止的最后一个值,并防止您的代码在您按下继续后再次停止这一秒。
private static final String URL = ...;
private MediaPlayer mediaPlayer;
public void start(Stage primaryStage) {
Media media = new Media(URL);
mediaPlayer = new MediaPlayer(media);
mediaPlayer.currentTimeProperty().addListener(new ChangeListener<Duration>() {
private int lastStop = 0;
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
int value = (int) newValue.toSeconds();
if (lastStop != value && value % 15 == 0) {
lastStop = value; // prevent this "stop" from triggering the pause again
mediaPlayer.pause();
}
}
});
Button btn = new Button("play");
btn.setOnAction(evt -> mediaPlayer.play());
Scene scene = new Scene(new StackPane(btn), 300, 300);
primaryStage.setScene(scene);
primaryStage.show();
}