[FXML]NullPointer suite à une lecture d'un .fxml
Résolu/Fermé
Skymer
Messages postés
477
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
-
Modifié par Skymer le 25/08/2016 à 17:53
Skymer Messages postés 477 Date d'inscription vendredi 6 décembre 2013 Statut Membre Dernière intervention 1 novembre 2018 - 11 sept. 2016 à 12:05
Skymer Messages postés 477 Date d'inscription vendredi 6 décembre 2013 Statut Membre Dernière intervention 1 novembre 2018 - 11 sept. 2016 à 12:05
A voir également:
- [FXML]NullPointer suite à une lecture d'un .fxml
- Confirmation de lecture whatsapp - Guide
- Lecture epub - Guide
- Accusé de lecture gmail - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- Lecture gratuite - Télécharger - Vie quotidienne
2 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
25 août 2016 à 19:59
25 août 2016 à 19:59
Bonjour,
Pourquoi tu as mis ton fichier .fxml dans "src" ?
Il devrait être dans "resources" pour que Eclipse le recopie dans le dossier "bin" sinon il n'y sera pas, à moins de l'y mettre toi même à chaque modif.
Remarque : "classes" c'est très moche comme nom de package...
Quant à ton problème, essayes avec
Autre alternative, tu gardes ton
Remarque : pour gérer la compatibilité avec les JAR je te conseilles de plutôt passer par un getResourceAsStream :
Pourquoi tu as mis ton fichier .fxml dans "src" ?
Il devrait être dans "resources" pour que Eclipse le recopie dans le dossier "bin" sinon il n'y sera pas, à moins de l'y mettre toi même à chaque modif.
├───src
│ └───classes
│ Main.java
├───resources
│ test.fxml
└───bin
│ test.fxml
│
└───classes
Main.class
Remarque : "classes" c'est très moche comme nom de package...
Quant à ton problème, essayes avec
"/test.fxml"pour avoir un chemin absolu, ou éventuellement
"../test.fxml"si tu tiens absolument à avoir un chemin relatif à ta classe.
Autre alternative, tu gardes ton
"test.fxml"en relatif, mais tu le déplaces dans un dossier qui a le même nom que ton package pour que le fichier .class et le fichier .fxml soient dans le même dossier.
Remarque : pour gérer la compatibilité avec les JAR je te conseilles de plutôt passer par un getResourceAsStream :
FXMLLoader.load(Main.class.getResourceAsStream("/test.fxml"));
Skymer
Messages postés
477
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
75
31 août 2016 à 22:37
31 août 2016 à 22:37
Merci :-) désolé d'avoir était aggressif, j'essayerai, mais avant (cela n'a aucun rapport, mais cela ne vaut le coup de créer un autre sujet) si je fais ça :
Est-ce que ce println va être en attente d'être exécuté ou dès lors que je vais dans une autre méthode cela "casse" la première ?
Je sais ma question n'es pas très bien posé ...
for (int i = 0; i != 10; i++) { if (i = x) action(); } System.out.println("i ne correspond pas à x");
Est-ce que ce println va être en attente d'être exécuté ou dès lors que je vais dans une autre méthode cela "casse" la première ?
Je sais ma question n'es pas très bien posé ...
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
31 août 2016 à 23:11
31 août 2016 à 23:11
Déjà
Quant aux méthodes des PrintStream il faudrait vérifier ce que dit exactement la documentation pour le cas général mais dans le cas particulier de System.out/err tu as la garantie que :
1) Tout les messages seront écrits.
Jamais l'appel d'un print annulera un appel précédent, une fois la méthode exécuté l'affichage est fait.
À voir cependant le comportement de quelques caractères particuliers comme le retour-arrière qui "efface" peut être le caractère précédent.
2) Les messages seront écrit dans le même ordre que l'ordre d'appel des méthodes.
Si tu fais des print de "a" puis de "b" tu auras toujours un affichage de "ab", jamais "ba".
3) Les méthodes sont thread safe.
Si deux threads concurrents appelent la méthode d'affichage pour "aaa" et "bbb" en même temps le résultat sera "aaabbb" ou "bbbaaa" mais jamais l'un ne sera au milieu de l'autre (comme "abbbaa" par exemple)
Remarques :
4) Ce n'est pas parce que la méthode est terminée que l'affichage est effectivement fait.
En général un buffer est utilisé et l'affichage effectué une fois le buffer plein ou au bout d'un certain temps, il peut donc y avoir d'un seul coup l'affichage de plusieurs appels de méthodes print successives.
5) Si plusieurs flux affichent sur le même support, la concurrence des appels peut provoquer des mélanges.
C'est notamment le cas lorsque l'on utilise tantôt System.out et tantôt System.err et qu'ils affichent dans la même console. Le message du System.out est dans l'ordre, celui du System.err aussi, mais rien ne permet de dire si System.out sera affiché avant, après ou pendant l'affichage de System.err
if (i = x)c'est faux, une comparaison se fait avec
==(d'ailleurs puisque ce sont des int ça ne doit même pas compiler...)
Quant aux méthodes des PrintStream il faudrait vérifier ce que dit exactement la documentation pour le cas général mais dans le cas particulier de System.out/err tu as la garantie que :
1) Tout les messages seront écrits.
Jamais l'appel d'un print annulera un appel précédent, une fois la méthode exécuté l'affichage est fait.
À voir cependant le comportement de quelques caractères particuliers comme le retour-arrière qui "efface" peut être le caractère précédent.
2) Les messages seront écrit dans le même ordre que l'ordre d'appel des méthodes.
Si tu fais des print de "a" puis de "b" tu auras toujours un affichage de "ab", jamais "ba".
3) Les méthodes sont thread safe.
Si deux threads concurrents appelent la méthode d'affichage pour "aaa" et "bbb" en même temps le résultat sera "aaabbb" ou "bbbaaa" mais jamais l'un ne sera au milieu de l'autre (comme "abbbaa" par exemple)
Remarques :
4) Ce n'est pas parce que la méthode est terminée que l'affichage est effectivement fait.
En général un buffer est utilisé et l'affichage effectué une fois le buffer plein ou au bout d'un certain temps, il peut donc y avoir d'un seul coup l'affichage de plusieurs appels de méthodes print successives.
5) Si plusieurs flux affichent sur le même support, la concurrence des appels peut provoquer des mélanges.
C'est notamment le cas lorsque l'on utilise tantôt System.out et tantôt System.err et qu'ils affichent dans la même console. Le message du System.out est dans l'ordre, celui du System.err aussi, mais rien ne permet de dire si System.out sera affiché avant, après ou pendant l'affichage de System.err
Skymer
Messages postés
477
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
75
>
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
1 sept. 2016 à 09:27
1 sept. 2016 à 09:27
Merci, bon pour i == x... Je crois que l'on peut passer ...
Mais j'ai trouvé moi même :
Ce qui donne
J'ai fait ça car ce que tu as dis ne me parait que très peu clair ... :/
Je vais regarder pour system.err
Mais j'ai trouvé moi même :
public static void main(String[] args) { if (true) { action(); } System.out.println("ERREUR"); } public static void action() { System.out.println("ceci est une action"); action2(); } public static void action2() { System.out.println("ceci est l'action numéro 2"); }
Ce qui donne
ceci est une action
ceci est l'action numéro 2
ERREUR
J'ai fait ça car ce que tu as dis ne me parait que très peu clair ... :/
Je vais regarder pour system.err
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
1 sept. 2016 à 10:22
1 sept. 2016 à 10:22
Si la réponse te "parait que très peu clair" c'est sûrement comme tu l'as dis que la "question n'es pas très bien posé", on ne parle peut être pas de la même chose...
Remarque : d'un point de vue communautaire il aurait été intéressant que cette question soit posée dans une discussion à part.
Remarque : d'un point de vue communautaire il aurait été intéressant que cette question soit posée dans une discussion à part.
Skymer
Messages postés
477
Date d'inscription
vendredi 6 décembre 2013
Statut
Membre
Dernière intervention
1 novembre 2018
75
>
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
2 sept. 2016 à 23:46
2 sept. 2016 à 23:46
Oui mais d'un point de vue logique, tu y aurais répondu à mes questions pour la énième fois :-)
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
3 sept. 2016 à 00:11
3 sept. 2016 à 00:11
<modérateur>"Le point de vue communautaire" dont je parle c'est de dire que si une personne tierce recherche sur Google des précisions sur le println il est plus logique qu'il tombe sur une discussion spécifique plutôt qu'un commentaire dans une question sur le JavaFX qui n'a rien à voir.
Alors effectivement, même si je verrais tôt ou tard ta question (comme toutes celles sur les forums Java), si tu poses une question à part, ça te permettra d'avoir d'autre réponses que les miennes, plus vite, avec des idées différentes. Alors qu'en restant sur cette discussion il y a très peu de chance qu'un nouvel interlocuteur vienne s'immiscer dans la discussion surtout s'il pense que c'est du JavaFX alors que ça n'en est pas...
Bref, plein de raisons qui font que pour toute nouvelle question on demande plutôt à créer une nouvelle discussion.</modérateur>
Alors effectivement, même si je verrais tôt ou tard ta question (comme toutes celles sur les forums Java), si tu poses une question à part, ça te permettra d'avoir d'autre réponses que les miennes, plus vite, avec des idées différentes. Alors qu'en restant sur cette discussion il y a très peu de chance qu'un nouvel interlocuteur vienne s'immiscer dans la discussion surtout s'il pense que c'est du JavaFX alors que ça n'en est pas...
Bref, plein de raisons qui font que pour toute nouvelle question on demande plutôt à créer une nouvelle discussion.</modérateur>
25 août 2016 à 22:53
En le mettant dans src, éclipse le recopie dans bin pourtant ...
"Remarque : "classes" c'est très moche comme nom de package... " Y a pas de quoi, mais je vais pleurer ... Tu connais le manque d'inspiration pour trouver un nom de package propre ?
Alors explique moi ... bin est sensé contenir SEULEMENT les classes (que l'on peut séparer par des packages) ou c'est tout aussi propre de mélanger classes et images / .fxml etc ... ?
".class et le fichier .fxml" c'est ce que j'avais à la base ...
"Remarque : pour gérer la compatibilité avec les JAR je te conseilles de plutôt passer par un getResourceAsStream : " J'essaye et merci :3
25 août 2016 à 23:08
:'(
Et je suis sûr que cela ne vient pas d'un problème de répertoire ...
25 août 2016 à 23:25
Tu n'as pas un chat ? Mets le sur le clavier 10 secondes, "jsfdogho" c'est très bien comme nom de package :-)
Il faut juste éviter l'utilisation de noms réservés, en lisant ta question au début je n'ai pas compris que "classes" était ton nom de package, c'est contre-intuitif pour un développeur, il a fallu que j'aille regarder dans la stack d'erreur pour voir que le nom complet était "classes.Main" (au passage, "Main" n'est pas non plus un bon nom de classe)
"Je ne connaissais pas l'existence de "resources""
Maintenant, tu sauras.
"éclipse le recopie dans bin pourtant"
J'ai essayé chez moi, et il ne le fait pas, il faut peut-être une configuration particulière, c'est pour ça qu'il vaut mieux ne pas utiliser les projets Eclipse.
Si tu as une heure, regardes Débuter avec Maven pour avoir une structure de projet standard, agnostique de l'IDE (ce qui n'empêche pas de travailler avec Eclipse)
"bin est sensé contenir SEULEMENT les classes"
En fait, "bin" n'a aucune existence en Java, c'est Eclipse qui rajoutes ce dossier, et il s'en sert pour construire son classpath d'exécution. Donc non, il peut contenir d'autres choses, et typiquement il doit contenir ton fichier fxml puisque Eclipse va le copier de resources, de même qu'il y mettra les classes compilées. C'est d'ailleurs comme ça que serait construit un JAR, avec les classes et les resources dans la même archives, pour autant elles ne seront généralement pas mélangées car les classes seront rangées dans leurs packages, et les ressources rangées généralement par type (images, sounds, etc.)
"cannot make a static reference to the non static method load (InputStream) frome the type FXMLLoader"
Oups, j'ai mal lu la documentation... la méthode load(URL) que tu utilisais est static mais la méthode load(InputStream) n'est pas static, il faut donc construire un objet FXMLLoader pour y accéder.
Remarque : ton problème initial était surtout dans le "test.fxml" au lieu du "/test.fxml" puisqu'il s'agissait d'un chemin relatif au lieu du chemin absolu.
Si tu ranges tes ressources avec par exemple un répertoire "javafx" tu aurais "/javafx/test.fxml"
NB. Je n'ai jamais fait de JavaFX ça reste bien sûr à confirmer, je ne fais que répéter ce que j'ai vu sur Google ;-)
Modifié par Skymer le 26/08/2016 à 13:19
Même si c'est vrai que c'est une mauvaise habitude ... Comme ce cas ci ...
J'ai toujours eu dans mes projets java : src (qui contenait mes classes et mes images etc ... Que je séparais par des dossiers différent / bin (une fois le programme compilé) contenait la même chose ...
et .classpath, et .project ...
Donc je mets "resources" à la racine du projet ?
Ok pour "bin" mais si je mets mes images dans le dossier src / et donc dans bin ... A quoi sert "resources" ? Je les mets où ces images ? dans src / bin ou dans resources ?
Pour :
Marche toujours pas, et ce que j'ai fait c'est que j'ai mis le chemin absolu et pas relatif de mon fichier (si c'est comme ça que l'on dit), j'ai bien vérifier d'avoir marqué le bon chemin ... Marche toujours pas, ce qui change dans la console c'est :
Si tu ranges tes ressources avec par exemple un répertoire "javafx" tu aurais "/javafx/test.fxml" Je le savais, mais merci
NB : J'ai était cherché sur google ... 5 secondes :3 (Sur stackoverflow.com)
J'avais déjà cherché par moi même plus d'une demi-heure ... Et les solutions qu'ils mettaient ne marcher pas .. C'est embêtant moi je voudrais bien finir d'apprendre javafx
Modifié par Skymer le 29/08/2016 à 16:45
><