2017-10-26 7 views
0

Ich versuche Szenen zu wechseln, ohne ein neues Fenster zu erstellen. Die Stufe, die ich initialisiere und gleich der von JavaFX bereitgestellten standardmäßigen primaryStage setze, scheint jedoch außerhalb der Startmethode gleich null zu sein. HierSzenen können nicht gewechselt werden, weil die Bühne null ist

ist der Code:

public static void main(String[] args) { 
    launch(args); 
} 


@Override 
public void start(Stage primaryStage) throws Exception{ 

    window = primaryStage; 
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 
    window.setTitle("Hello World"); 
    window.setScene(new Scene(root, 1000, 1000)); 
    window.show(); 
    System.out.println(window + "start"); 
} 





public void regEvent() 
{ 
    System.out.println(window); 
    startGame(4,4); 

} 
private void startGame(int width, int height) 
{ 
    System.out.println(window); 
    board = new Tile[width][height]; 

    grid = new GridPane(); 
    grid.setPadding(new Insets(10,10,10,10)); 
    //individual cell spacing 
    grid.setVgap(10); 
    grid.setHgap(10); 

    for(int x = 0; x< width; x++) 
    { 
     for(int y = 0; y< height; y++) 
     { 
      board[x][y] = new Tile(x,y); 
      board[x][y].setText(x + " , " + y); 
      GridPane.setConstraints(board[x][y], x, y); 
      grid.getChildren().add(board[x][y]); 
     } 
    } 
    Scene scene = new Scene(grid,1000,1000); 
    window.setScene(scene); 
    window.show(); 
} 

Wenn ich sage "window.setScene (Szene)" in dem startGame Verfahren wird eine Nullpointer-Ausnahme ausgelöst. Ich weiß, dass das Fenster Stage dafür verantwortlich ist, weil das println-Fenster am Anfang von startGame null zurückgibt.

Das macht für mich keinen Sinn, weil ich das Fenster am Anfang dieser Klasse initialisiert habe und ihm einen Wert gegeben habe, bevor startGame überhaupt über die Startmethode aufgerufen wird.

Kann mir jemand sagen, wie man die Szene wechselt, die gleiche Bühne zu halten? Das ist alles was ich tun möchte.

Danke Jungs!

+3

Sie erscheinen 'startGame()' 'von regEvent()' aufrufen, aber wo Sie den Aufruf 'regEvent() 'aus? –

+0

wo deklarieren Sie 'window'? Wir können nicht wirklich helfen, wenn wir nicht den ganzen relevanten Code sehen können. – MMAdams

+0

James_D, regEvent() wird aus der FXML-Datei aufgerufen, die in SceneBuilder eingerichtet wurde. Es tritt auf, wenn auf eine Schaltfläche geklickt wird –

Antwort

Verwandte Themen