FXML / FXMLLoader erreur outil(s) de diagnostic recherché (s)
vue d'ensemble
Bonjour, voici un plan boîte à utiliser. J'ai un fichier FXML apparemment valide développé dans JavaFX Scene Builder . Il s'agit maintenant d'un morceau non trivial de XML et il y a des erreurs de chargement d'exécution quelque part dans le fichier FXML. Scene Builder fonctionne très bien avec L'option Preview. J'ai un simple .fxml fichier que j'utilise pour vérifier que le contrôleur fonctionne comme prévu, c'est les contrôles de même et les événements, mais sans les mises en page FXML supplémentaires. Et j'ai fait et je fais le code de découpage et la boucle de test pour identifier le XML avec le problème. Donc je vais aller au fond des choses à un moment donné.
actuellement, il n'y a pas d'erreurs dans Scene Builder ni dans L'éditeur Netbeans FXML et je ne reçois pas d'erreur avec la charge comme dans " JavaFX - loading erreur de fichier FXML " (#1). Tout ce que je reçois est une exception sur la tâche finale dans runnable, qui dit le loader a fait une exception.
objectif(s)
ces erreurs se produisent. La question Est de savoir quels outils sont disponibles ou en développement pour dépanner les fichiers FXML ?
Quelques réflexions, des questions ou des options:
- est-ce un bug? Pour se rappeler quelque chose comme la boîte noire comme un chargeur devrait émettre une sorte d'indicateur comme la défaillance sur la ligne 246 ou " ... Quelque chose qui indique où chercher.
- quelles astuces, techniques ou suggestions avez-vous pour trouver /résoudre de telles erreurs plus rapidement?
- Est-il une place pour Inclure
- quels crochets y a-t-il sur la classe FXMLLoader pour attraper ou piéger les erreurs avant que tout tombe?
- y a-t-il des installations pour enregistrer ou diagnostiquer le traitement FXMLLoader?
- Quelqu'un a-t-il écrit un FXMLLoader personnalisé qui pourrait être utilisé de cette façon? (voir #3).
- j'ai vu que FXML utilise le SAX, est-il possible d'envelopper ou d'accrocher l'analyseur et de donner au FXMLLoader un autre analyseur?
- y a-t-il des outils statiques pour analyser L'application FXML et Java -- comme un FXML Lint ou quelque chose comme ça?
- Quelle profondeur FXML charge, d'analyser, d'exécution des informations sont disponibles sur la façon dont le FXML est traité.
- y a-t-il ou pourrait-on ajouter des points d'entrée supplémentaires ou les injecter dans le(S) contrôleur (s) pour saisir les problèmes de charge FXML?
- par exemple, les contrôleurs peuvent être cascadés de telle sorte que je puisse faire un "contrôleur racine" qui pourrait capturer des problèmes plus près du point d'origine.
à l'heure actuelle, les problèmes à l'intérieur de la FXML qui sont seulement découvert au moment du chargement sont juste le temps long et imprévisible, si les éditeurs ne pas voir quoi que ce soit. Je voudrais voir quelques outils de diagnostic si quelqu'un h
Autres Aperçus
ce sont quelques conseils pertinents" débogage ' et " dépannage " qui apparaissent pendant le développement. Peut-être que certains d'entre eux trouveront leur chemin dans un validateur FXML ou un outil Lint un jour(?) Les points sont en non ordre particulier, ils sont numérotés à des fins de renvoi.
- tout Identificateur de contrôleur dans la FXML doit être présent et annoté dans le code Java avec @FXML. S'il manque une annotation, le FXML ne se chargera pas.
- tout Nom Java annoté avec @FXML doit figurer dans le fichier de mark-up FXML. Dites une étiquette appelée "myLabel": si le myLabel utilisé dans le code NullPointerException. Le fichier se chargera, contrairement au cas n ° 1.
- N'utilisez pas L'option" compiler on Save " de NetBeans avec JavaFX. Il semble générer des NullPointerException-s sur du code apparemment correct.
- si vous renommez/reformatez votre application principale, assurez-vous de mettre à jour la cible de construction (par exemple maven ou ant). Un code de réflecteur IDE peut manquer ce lien.
-
FXMLLoader() vous donne un indice. Si vous attrapez la exception, vous pouvez regarder le "getMessage()" ...
catch( Exception ex ){ System.out.println("Exception on FXMLLoader.load()"); System.out.println( ex.getMessage() ); //-- Doesn't show in stack dump }
-
Vérifiez votre dactylographie sur les ressources FXML. Les petites fautes de frappe sont le diable pour identifier et détecter. Cela vaut pour toute chaîne qui n'est pas vérifiée par un compilateur ou une peluche, pas seulement FXML.
// These two line are not the same: Parent root; root = FXMLLoader.load(getClass().getResource("Samplle.fxml")); root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
-
il exception.getMessage (): " Emplacement requis ", pour cette faute de frappe dans le #6.
- si vous éditez le FXML manuellement, assurez-vous que vous tous les composants pertinents.
-
N'oubliez pas d'inclure L'espace de noms FXML avec les fichiers"- d", Par exemple nécessaires sur L'élément XML externe.
<TreeView id="treeView" fx:id="tree" xmlns:fx="http://javafx.com/fxml" ... >
Espère que quelque chose aide. Ce sont des suppositions basées sur de petits tests et essais. S'il vous plaît corriger les hypothèses intégrées de malentendus sur la façon dont les choses en fait de travail.
voir aussi :
- JavaFX - loading erreur de fichier FXML
- Android outil de diagnostic pour les applications (cas d'utilisation)
- j'aimerais remplacer FXMLLoader. Comment puis-je le faire?
- Comment FXMLLoader charge le contrôleur de FXML?
- impossible de localiser L'erreur FXML pour JavaFX (cas d'utilisation)
- Classe javafx.fxml.Fxmllloader
- JavaFX Architecture (PDF disponible), malheureusement il n'y a rien ici à propos de FXML.
- Introduction à FXML
- Fxmllloader.code source java
2 réponses
j'ai eu le même problème en utilisant SceneBuilder 2.0 et JavaFX2. Le problème est que SceneBuilder génère du code JavaFX8. Le code est valide mais pas compatible 100% JavaFX2. Peut-être que ce pourrait être votre problème. Vous devriez obtenir une Exception du FXMLLoader dans quelle ligne se trouve l'erreur.
Vue Panoramique
Scenic View est une application JavaFX conçue pour comprendre l'état actuel de votre application scenegraph, et à aussi facilement manipuler les propriétés du scenegraph sans avoir à continuez d'éditer votre code. Cela vous permet de trouver des bogues, et obtenir des choses pixel parfait sans avoir à faire la danse compile-check-compile.
il y a une bonne recommandation et description de la vue panoramique dans cette présentation:
mise à jour Scenic View fonctionne comme un débogueur ou un moniteur pour les applications JavaFX. Cela n'aidera pas avec les problèmes de chargeurs FXML, car il étudie ou surveille les scènes running . J'ai aussi trouvé la version la plus récente, v1.3.0, être instable sur Windows 7 et Java 8, 64 bits.