[英]Why doesn't work my video timeline?
I'm trying to make a video timeline, with a slider (change which sec appear on the screen) but it doesn't work. 我正在尝试使用滑块(更改在屏幕上显示的秒数)制作视频时间轴,但是它不起作用。 My problem is, the method above is not working.
我的问题是,上面的方法不起作用。 I really don't know why, I saw this code working in many tutorials but I can't use.
我真的不知道为什么,我在很多教程中都看到了这段代码,但是我不能使用。
The error message is: "no suitable method found addListener" 错误消息是:“找不到合适的方法addListener”
This is the problematic method: 这是有问题的方法:
mediaPlayer.currentTimeProperty().addListener(new ChangeListener<Duration>() {
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
seekSlider.setValue(newValue.getSeconds());
}
});
package amedia;
import java.io.File;
import java.net.URL;
import java.time.Duration;
import java.util.ResourceBundle;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
public class FXMLDocumentController implements Initializable {
private MediaPlayer mediaPlayer;
private String filePath;
@FXML
private Label label;
@FXML
private MediaView mediaView;
@FXML
private Slider slider;
@FXML
private Slider seekSlider;
@FXML
private void handleButtonAction(ActionEvent event) {
FileChooser fileChooser = new FileChooser();
FileChooser.ExtensionFilter filter = new FileChooser.ExtensionFilter("Select a file (*.mp4)", "*.mp4");
fileChooser.getExtensionFilters().add(filter);
File file = fileChooser.showOpenDialog(null);
filePath = file.toURI().toString();
if (filePath != null) {
Media media = new Media(filePath);
mediaPlayer = new MediaPlayer(media);
mediaView.setMediaPlayer(mediaPlayer);
DoubleProperty width = mediaView.fitWidthProperty();
DoubleProperty height = mediaView.fitHeightProperty();
width.bind(Bindings.selectDouble(mediaView.sceneProperty(), "width"));
height.bind(Bindings.selectDouble(mediaView.sceneProperty(), "height"));
slider.setValue(mediaPlayer.getVolume() * 100);
slider.valueProperty().addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
mediaPlayer.setVolume(slider.getValue()/100);
}
});
mediaPlayer.currentTimeProperty().addListener(new ChangeListener<Duration>() {
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
seekSlider.setValue(newValue.getSeconds());
}
});
mediaPlayer.play();
}
}
@FXML
private void pauseVideo(ActionEvent event) {
mediaPlayer.pause();
}
@FXML
private void playVideo(ActionEvent event) {
mediaPlayer.play();
mediaPlayer.setRate(1.0);
}
@FXML
private void stopVideo(ActionEvent event) {
mediaPlayer.stop();
}
@FXML
private void fastVideo(ActionEvent event) {
mediaPlayer.setRate(1.5);
}
@FXML
private void fasterVideo(ActionEvent event) {
mediaPlayer.setRate(2.5);
}
@FXML
private void slowVideo(ActionEvent event) {
mediaPlayer.setRate(0.75);
}
@FXML
private void slowerVideo(ActionEvent event) {
mediaPlayer.setRate(0.5);
}
@FXML
private void exit(ActionEvent event) {
System.exit(0);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
You have imported the wrong Duration class: 您导入了错误的Duration类:
import java.time.Duration;
You need to import the JavaFX Duration class instead: 您需要改为导入JavaFX Duration类 :
import javafx.util.Duration;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.