gpt4 book ai didi

java - 在EndOfMedia 上更改场景

转载 作者:行者123 更新时间:2023-12-01 12:26:46 25 4
gpt4 key购买 nike

有没有办法通过javafx中的setOnEndOfMedia来改变场景? ..我尝试了这个,但它抛出了 NullPointerException

void change(Event event){
try{
Node node=(Node) event.getSource();
Stage stage=(Stage) node.getScene().getWindow();
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("astrolabe/astrolabe_intro.fxml"));/* Exception */

Scene scene = new Scene(root);
stage.setScene(scene);
stage.setFullScreenExitHint("");

stage.show();
}
catch(Exception ex)
{
ex.printStackTrace();
}


}

并在媒体末尾调用change(),如下所示

astrolabe_intro.setOnEndOfMedia(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("tewst");
Event e = new Event(null) ;
e.fireEvent(astrolabe_intro1, e);
change( e);


}
});

最佳答案

如果异常来自 FXMLLoader.load(...) 行,则很可能是 fxml 文件的路径错误。记录您通过调用 getResource(...) 获取的 URL 值进行检查。

而且:

您为什么需要这个 Activity ?在 change 方法中使用它的唯一地方是获取节点并获取窗口。您可能对某些节点有其他引用(我假设这是一个 Controller 。)为什么不这样做

void change(){
try{
Node node= ... ;// any node in your scene will do....
Stage stage=(Stage) node.getScene().getWindow();
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("astrolabe/astrolabe_intro.fxml"));/* Exception */

Scene scene = new Scene(root);
stage.setScene(scene);
stage.setFullScreenExitHint("");

stage.show();
}
catch(Exception ex)
{
ex.printStackTrace();
}


}

然后

astrolabe_intro.setOnEndOfMedia(new Runnable() {
@Override
public void run() {
change();
}
});

在 Java 8 中您可以缩写为

astrolabe_intro.setOnEndOfMedia(this::change);

关于java - 在EndOfMedia 上更改场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26272991/

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