Java 在DofMedia上更改场景

Java 在DofMedia上更改场景,java,javafx,media-player,media,Java,Javafx,Media Player,Media,是否有一种方法可以通过javafx中的setOnEndOfMedia更改场景。。我试过了,但它抛出了一个NullPointerException void change(Event event){ try{ Node node=(Node) event.getSource(); Stage stage=(Stage) node.getScene().getWindow(); Parent root = F

是否有一种方法可以通过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);


            }
        });

如果异常来自
fxmloader.load(…)
行,那么很可能是fxml文件的路径错误。记录调用
getResource(…)
进行检查时得到的URL值

而且:

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

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();
    }
});
在Java8中,您可以缩写为

astrolabe_intro.setOnEndOfMedia(this::change);

寻求调试帮助的问题(“为什么此代码不工作?”)的可能重复必须包括所需的行为、特定的问题或错误以及在问题本身中复制所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅。您在哪一行获得
NullPointerException
?您能否给出足够的代码,或者至少一个解释,以便我们理解您为什么试图在
onEndOfMedia
处理程序中触发事件?