Main.class
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
MainController.class
public class MainController implements Initializable {
@FXML private MediaView mv;
private MediaPlayer mp;
private Media me;
@FXML Slider volumeSlider;
DoubleProperty width;
DoubleProperty height;
Stage stage;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
String path = new File("src/media/my.mp4").getAbsolutePath();
me = new Media(new File(path).toURI().toString());
mp = new MediaPlayer(me);
mv.setMediaPlayer(mp);
//mp.setAutoPlay(true);
stage = (Stage) mv.getScene().getWindow(); // Error occured
width = mv.fitWidthProperty();
height = mv.fitHeightProperty();
width.bind(Bindings.selectDouble(mv.sceneProperty(), "width"));
height.bind(Bindings.selectDouble(mv.sceneProperty(), "height"));
volumeSlider.setValue(mp.getVolume() * 100);
volumeSlider.valueProperty().addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
// TODO Auto-generated method stub
mp.setVolume(volumeSlider.getValue() / 100);
}
});
}
public void play(ActionEvent event){
mp.play();
mp.setRate(1);
}
public void pause(ActionEvent event){
mp.pause();
}
public void fast(ActionEvent event){
mp.setRate(2);
}
public void slow(ActionEvent event){
mp.setRate(.5);
}
public void reload(ActionEvent event){
mp.seek(mp.getStartTime());
mp.play();
}
public void start(ActionEvent event){
mp.seek(mp.getStartTime());
mp.stop();
}
public void last(ActionEvent event){
mp.seek(mp.getTotalDuration());
mp.stop();
}
public void fullScreen(ActionEvent event){
}
}
Error
javafx.fxml.LoadException:
/C:/Users/SOONMYUN/workspace/MediaPlayer/bin/application/Main.fxml
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at application.Main.start(Main.java:17)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at application.MainController.initialize(MainController.java:44)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
... 17 more
我希望能够在控制器类中获取来自主类的舞台,但是失败了。
原因是我应该在控制器类中使用setFullScreen函数。
stage.sizeToScene()
会抛出nullpointerexception异常。我在同一控制器类中的另一个函数authenticate(ActionEvent event)
中使用了stage.sizeToScene()
。我需要将stage
传递到这个authenticate(ActionEvent event)
函数中吗?谢谢。 - Riley Fitzpatrick