Этот метод (abc) вызывается при нажатии кнопки в первой сцене.Он меняет сцену на waitScreen и вызывает другой метод waitscr ()
public void abc(ActionEvent event)throws Exception{
stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
//for changing the scene.
Parent administrator =
FXMLLoader.load(getClass().getResource("waitingScreen.fxml"));
stage.setScene(new Scene(administrator));
stage.show();
conn.close();
waiting_screen_Controller c = new waiting_screen_Controller();
c.waitscr(event);
Что делает waitscr, так это запускает таймер на 5 секунд, а когда таймер завершает работу, вызывает другой метод setscr () (возможно, я мог бы запустить таймер только в abc)
public void waitscr(ActionEvent event)throws IOException{
timetask = new TimerTask(){
@Override
public void run() {
if(!timing){
try{
timetask.cancel();
setscr(event);
}
catch(Exception ex){
ex.printStackTrace();
}
}
else
timing = updateTime();
}
};
timer.scheduleAtFixedRate(timetask,1000,1000);
}
он обновляет время
public boolean updateTime(){
System.out.println(s);
if(s==0){
return false;
}
s--;
return true;
}
, что делает setscr, это меняет сцену обратно на первую ..
public void setscr(ActionEvent event)throws IOException{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("first.fxml"));
Parent parent = loader.load();
Scene s=new Scene(parent);
stage = (Stage)((Node) event.getSource()).getScene().getWindow();
System.out.print(event.getSource());
stage.setScene(s);
stage.show();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
Но проблема в том, что он дает npe на этапе.
java.lang.NullPointerException
at sample.waiting_screen_Controller.setscr(waiting_screen_Controller.java:106)
at sample.waiting_screen_Controller$1.run(waiting_screen_Controller.java:45)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Я думал, что это из-за ActionEvent, потому что npe находится на стадии, но я напечатал источник ActionEvent, и он не нулевой.