IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Pourquoi les deux codes suivants donnent des résultats différents ?


Sujet :

JavaFX

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut Pourquoi les deux codes suivants donnent des résultats différents ?
    soit les deux codes suivants:
    code1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            FXMLLoader loader = new FXMLLoader();
            Parent root = (Parent) loader.load(getClass().getResource("Screen1.fxml"));
            Screen1Controller controller = loader.getController();
            if(controller == null)
                System.out.println(" controller is null");
                else System.out.println("controller is not null");
    résulta:
    controller is null

    code2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            FXMLLoader loader =  new FXMLLoader(getClass().getResource("Screen1.fxml"));
            Parent root = (Parent)loader.load();
            Screen1Controller controller = loader.getController();
            if(controller == null)
                System.out.println(" controller is null");
                else System.out.println("controller is not null");
    résulta:
    controller is not null
    j'ai pensé qu''ils vont donner le même résulta.

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Salut,
    comment as-tu defini ton controler?

    Eric

  3. #3
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Parce que la méthode load(URL) est "static"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            FXMLLoader loader = new FXMLLoader();
            Parent root = (Parent) loader.load(getClass().getResource("Screen1.fxml"));
            Screen1Controller controller = loader.getController();
    Equivaut à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            Parent root = (Parent) FXMLLoader.load(getClass().getResource("Screen1.fxml"));
     
            FXMLLoader loader = new FXMLLoader();
            Screen1Controller controller = loader.getController();
    Donc controller est bien null
    Je ne suis pas mort, j'ai du travail !

  4. #4
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    Mais une méthode statique peut bien évidemment créer des objets.

  5. #5
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par win_ubuntu Voir le message
    Mais une méthode statique peut bien évidemment créer des objets.
    Oui, mais elle n'a aucun effet sur les attributs et propriétés des autres instances.
    L'API à ce niveau a un gros soucis de nommage des méthodes qui n'est pas clair du tout vu qu'il existe des méthodes load statiques et des méthodes load qui ne le sont pas. C'EST MOCHE !

    load() : méthode de l'instance
    load(InputSteam is) : méthode de l'instance

    load(URL) : méthode statique
    load(URL... : plein de méthodes statiques

    Je reprends et je commente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            FXMLLoader loader = new FXMLLoader(); // ici tu crées un loader...
            Parent root = (Parent) loader.load(getClass().getResource("Screen1.fxml")); // ici tu appelles la méthode load statique... Qui n'a donc AUCUN effet sur ton instance de loader !
            Screen1Controller controller = loader.getController(); // ici ton controller est null parce que ton instance n'est toujours pas chargée

    Pour que ça marche, il faudrait faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            FXMLLoader loader = new FXMLLoader(); // ici tu crées un loader...
            loader.setLocation(getClass().getResource("Screen1.fxml")); // tu précises le fichier à charger
            Parent root = (Parent) loader.load(); // tu charges et tu récupères ton parent
            Screen1Controller controller = loader.getController(); // ici, ton controller n'est pas null
    Je ne suis pas mort, j'ai du travail !

  6. #6
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    Un grand merci @eulbobo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/06/2015, 22h24
  2. Entêtes donnent des résultats plutôt aléatoires
    Par Dendrite dans le forum Langage
    Réponses: 1
    Dernier message: 19/08/2010, 13h39
  3. la difference entre les deux code
    Par infoelectronique dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/07/2008, 08h08
  4. [SQL2K]Une même requête des résultats différents
    Par jeeerome dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/07/2006, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo