gpt4 book ai didi

java - 如何在 Controller 类中引用 Stage?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:03 26 4
gpt4 key购买 nike

<分区>

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

我想从 Main 类获取 Stage 到 Controller 类,但是失败了。

因为我应该在 Controller 类中使用 setFullScreen 函数。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com