2016-04-07 2 views
0

Dans mon application JavaFX, j'obtiens une exception NullPointerException que je n'arrive pas à comprendre pour la vie de ma personne. L'application est une pseudo-base de données simple qui affiche dans ce cas les entrées de développeur dans une table avec leurs différentes données, et l'utilisateur peut ouvrir une fenêtre secondaire pour fournir une entrée et ainsi créer une nouvelle entrée. Code du contrôleur principal de la fenêtre:Application JavaFX FXML: étrange exception NullPointer sur un nœud FXML

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 de la fenêtre secondaire où l'utilisateur entre les données pour un nouveau développeur:

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

    } 
} 

Ce que cela fait est une NullPointerException à la ligne

MainWindowController.textMessageDisplay.setText("Name and password must not be empty!"); 

dès que le bouton Créer est enfoncé avec les champs de texte de saisie vides. Pourquoi? Tout va bien par moi, textMessageDisplay est déclaré dans MainWindowControlled et initialisé à partir du fichier FXML, je peux le voir avec son texte par défaut dans la fenêtre de l'application. Alors qu'est-ce qui se passe, qu'est-ce qui me manque ici?

+0

J'ai déjà dit il me semble que j'ai fait la déclaration et l'initialisation correctement, que la variable pointe en effet vers un objet existant. Pourriez-vous préciser ce qui ne va pas dans mon code? – Sargon1

+0

Voir http://stackoverflow.com/questions/23105433/javafx-8-compatibility-issues-fxml-static-fields pour savoir pourquoi vous obtenez l'exception et http://stackoverflow.com/questions/34118025/javafx-pass- valeurs-d'-enfant-à-parent pour les moyens de faire ce que vous essayez de faire. –

Répondre

0

Je suppose que vous utilisez textMessageDisplay statiquement qui crée le problème, essayez de accees en créant l'objet de MainWindowController.