Ich benutze JavaFX, um eine Ansicht von meinem Spiel zu zeigen.Nullpointer bei der Initialisierung der JavaFX-Ansicht
The View geladen wird, wenn ich die Methode in meiner MainApp
Klasse aufrufen:
public class MainApp extends Application {
//fields
public MainApp() {
this.game = new Game();
}
//lots of other methods
public void showGameView() {
try {
System.out.println(game.getPlayer().getCurrentRoom());
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/GameView.fxml"));
AnchorPane GameView = (AnchorPane) loader.load();
rootLayout.setCenter(GameView);
GameViewController controller = loader.getController();
controller.setMainApp(this);
} catch (IOException e) {
e.printStackTrace();
}
}
public Game getGame() {
return game;
}
Die Game
Objekt speichert einige Informationen und Material. Der Controller sieht folgendermaßen aus:
public class GameViewController {
private MainApp mainApp;
@FXML
public void initialize() {
mainApp.getGame(). ... //do something else
}
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
Ich habe es immer so gemacht. Wenn der Controller geladen wird, werden die MainApp
Objekte in den Controller gesetzt und ich kann damit arbeiten. Aber jetzt bekomme ich einen Nullpointer, wenn jemand mainApp.get...
ruft. Das Feld mainApp
ist null. Ich weiß wirklich nicht, was der Deal hier ist, denn wie gesagt, es hat in anderen Projekten so funktioniert.
Das sieht nach einer ziemlich guten und einfachen Lösung aus. Und ich denke, sein sauberer Stil als das, was ich zuerst in dem Kommentar zu den anderen Antworten dachte. Danke auch! – Master1114