Java 在DofMedia上更改场景
是否有一种方法可以通过javafx中的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
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
处理程序中触发事件?