In meiner JavaFX-App bekomme ich eine NullPointerException, die ich nicht für das Leben von mir herausfinden kann. Die App ist eine einfache Pseudo-Datenbank, die in diesem Fall Entwicklereinträge in einer Tabelle mit ihren verschiedenen Daten anzeigt, und der Benutzer kann ein sekundäres Fenster öffnen, um einige Eingaben zu machen und somit einen neuen Eintrag zu erstellen. Code des Hauptfensters Controller:JavaFX FXML App: seltsame NullPointer-Ausnahme an einem FXML-Knoten
public class MainWindowController {
/*
*/
@FXML
public static Text textMessageDisplay;
@FXML
private void handleCreateDeveloper() throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("CreateDeveloperWindow.fxml"));
Scene CreateDeveloperScene;
CreateDeveloperScene = new Scene(loader.load());
Stage inputStage = new Stage();
inputStage.initOwner(theStage);
inputStage.setScene(CreateDeveloperScene);
inputStage.showAndWait();
}
public void initialize() {
developerNameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
}
/*
*/
}
Code des sekundären Fenster, in dem der Benutzer die Daten für einen neuen Entwickler-Eingänge:
public class CreateDeveloperWindowController {
@FXML
private Button newDeveloperCreateButton;
@FXML
//TODO Check for same name
private void handleCreateDeveloperButton() {
String proposedNewDevName = newDeveloperNameTextField.getText();
String proposedNewDevPass = newDeveloperPassTextField.getText();
if (proposedNewDevName.equals("") || proposedNewDevPass.equals("")) {
MainWindowController.textMessageDisplay.setText("Name and password must not be empty!");
} else {
allDevelopers.add(new Developer(proposedNewDevName, proposedNewDevPass));
}
}
}
Was dies tut, ist eine Nullpointer am
Linie werfenMainWindowController.textMessageDisplay.setText("Name and password must not be empty!");
, sobald die Schaltfläche Erstellen gedrückt wird und die Eingabetextfelder leer sind. Warum? Alles ist in Ordnung für mich, TextMessageDisplay wird in MainWindowControlledle deklariert und aus der FXML-Datei initialisiert, ich kann es mit seinem Standardtext im App-Fenster sehen. Also was ist los, was fehlt mir hier?
Ich sagte bereits, es scheint mir, dass ich die Deklaration und Initialisierung richtig gemacht habe, dass die Variable tatsächlich auf ein vorhandenes Objekt zeigt. Könnten Sie vielleicht näher erläutern, was genau in meinem Code falsch ist? – Sargon1
Siehe http://stackoverflow.com/questions/23105433/javafx-8-compatibility-issues-fxml-static-fields für warum Sie die Ausnahme erhalten und http://stackoverflow.com/questions/34118025/javafx-pass- values-from-child-to-parent für Möglichkeiten, zu tun, was Sie versuchen zu tun. –