2016-03-25 36 views
0

'daki sahneyi değiştirdiğimde sahnemdeki veya yakın sahne sahnemdeki sahneleri değiştirmek istiyorum: startgame düğmesine ve çıkış düğmesine basıyorum, ancak sadece ilk sahneyi göstereceğim ve itmeye çalıştığımda NullPointerException durumunda bu düğmelerden bir tanesini kapatın.NullPointerException JAVAFX

Ayrıca ana sınıf ve iki fxml dosyam var, ama bence buraya koymanıza gerek yok, sadece iki çapa bölmesi, ilkel etiket ve düğme içeriyor.

package sample; 

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.AnchorPane; 
import javafx.stage.Stage; 

import java.io.IOException; 
import java.net.URL; 
import java.util.ResourceBundle; 

public class Controller implements Initializable{ 

    private Stage stage = new Stage(); 

    private FXMLLoader loader = new FXMLLoader(); 

    private AnchorPane anchorPane = new AnchorPane(); 

    private Scene scene = new Scene(new AnchorPane()); 

    @FXML private Button startGameButton; 
    @FXML private Button endGameButton; 

    @FXML private Button buttonAnswer1; 
    @FXML private Button buttonAnswer2; 
    @FXML private Button buttonAnswer3; 
    @FXML private Button buttonAnswer4; 

    public void createScene(int typeOfScene) throws Exception 
    { 
     if (typeOfScene == 1) 
     { 
      loader = new FXMLLoader(getClass().getResource("/sample/sample.fxml")); 
      anchorPane = loader.load(); 

      scene = new Scene(anchorPane); 
      stage.setScene(scene); 
      stage.show(); 
     } 

     if (typeOfScene == 2) 
     { 
      scene = null; 

      loader = new FXMLLoader(getClass().getResource("/sample/episodesFXML.fxml")); 

      anchorPane = loader.load(); 

      scene = new Scene(anchorPane); 
      stage.setScene(scene); 
      stage.show(); 
     } 
    } 

    public void getPrimaryStage(Stage stage) throws Exception 
    { 
     this.stage = stage; 
     createScene(1); 
    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     startGameButton.setOnAction(event -> { 
      try { 
       createScene(2); 
      } catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     }); 

     endGameButton.setOnAction(event -> { 
      stage.close(); 
     }); 
    } 
} 
+3

[Null Pointer Exception nedir ve bunu nasıl düzeltebilirim?] 'In olası kopyası (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – hotzst

+0

Gerçekten de, ek detaylar sağlayamadığınız sürece bu sorunun bir kopyası ... hangi değer "null" ... Stacktrace ne diyor? – fabian

+0

Düğme start düğmesine bastığımda, fonksiyon yaratıyorum 'createScenes (2)' derleyicim hattan öfkeliyor anchorPane = loader.load(); 've düğmeyi sonlandırdığımda oyun sona ermez, ama sahnemi kapatmalıyım . –

cevap

0

Böyle bir sorunu hatırlıyorum, fxml dosyası bir denetleyici dosyasına fx: controller özniteliği tarafından bağlanmıştır. Kullanılmadığı/yüklenmediği bir denetleyiciye fxml yüklemeye çalışın. Başka bir form oluştur ve formları gösterme/gizleme daha basit görünüyor.

+0

fx: controller özniteliğini fxml dosyalarından kaldırın ve fxmlLoader.setController() öğesini kullanın; denetleyiciyi dinamik olarak tanımlamak için. – Tokazio