2014-10-09 113 views
0

有沒有辦法在javafx中改變場景setOnEndOfMedia? ..我試過,但它拋出一個NullPointerException改變場景onEndOfMedia

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); 


      } 
     }); 
+0

可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – DavidPostill 2014-10-09 08:07:44

+0

尋求調試幫助的問題(「* *爲什麼這個代碼不工作?「)必須包含所需的行爲,特定的問題或錯誤以及在問題本身**中重現**所需的最短代碼。沒有**明確問題陳述**的問題對其他讀者沒有用處。請參見[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – DavidPostill 2014-10-09 08:08:03

+0

你在哪一行得到'NullPointerException'?你可以給你足夠的代碼,或者至少有一個解釋,所以我們明白你爲什麼試圖在'onEndOfMedia'處理程序中觸發事件? – 2014-10-09 11:45:17

回答

1

如果異常從FXMLLoader.load(...)線的到來,機會是路徑fxml文件是錯誤的。將您從呼叫中獲得的URL的值記錄到getResource(...)以進行檢查。

還有:

爲什麼你需要這個活動呢?您在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(); 
    } 
}); 

其在Java中8,你可以縮寫爲

astrolabe_intro.setOnEndOfMedia(this::change); 
+0

感謝您的幫助:) – Fawzinov 2014-10-09 13:52:41