FXML / FXMLLoader-Fehlerdiagnose-Tool (s) gesucht

Überblick

Hi, hier ist einGliederung Anwendungsfall. Ich habe eine scheinbar gültige FXML-Datei in entwickeltJavaFX Scene Builder. Mittlerweile handelt es sich um einen nicht trivialen XML-Block, und irgendwo in der FXML-Datei sind Fehler beim Laden zur Laufzeit aufgetreten. Scene Builder funktioniert problemlos mit der Option Vorschau. Ich habe ein 'einfach.fxml-Datei, die ich verwende, um zu überprüfen, ob der Controller wie beabsichtigt funktioniert, dh dieselben Steuerelemente und Ereignisse, aber ohne die zusätzlichen FXML-Layouts. Und ich habe und ich mache den Cut-Out-Code und die Testschleife, um das XML mit dem Problem zu identifizieren. Also werde ich irgendwann auf den Grund gehen.

Derzeit werden weder im Scene Builder noch im Netbeans FXML-Editor Fehler angezeigt, und es wird kein Fehler beim Laden wie in "JavaFX - Fehler beim Laden der FXML-Datei"(# 1). Alles, was ich bekomme, ist eine Ausnahme bei der Endaufgabe in Runnable, die besagt, dass der Lader eine Ausnahme ausgelöst hat.

Tore)

Diese Fehler treten auf. Die Frage ist, welche Tools zur Verfügung stehen oder sich in der Entwicklung befindenProblembehandlung bei FXML-Dateien?

Einige Gedanken, Fragen oder Optionen:

Ist das ein Bug? Wenn Sie sich an so etwas wie eine Blackbox wie einen Lader erinnern, sollten Sie eine Art Indikator wie Fehler in Zeile 246 oder "... etwas ausgeben, das anzeigt, wo Sie suchen müssen.Welche Tricks, Techniken oder Vorschläge haben Sie, um solche Fehler schneller zu finden / zu beheben?Gibt es einen Ort für die Verwendung von IncludeWelche Hooks gibt es in der FXMLLoader-Klasse, mit denen Fehler abgefangen oder abgefangen werden können, bevor alles herunterfällt?Gibt es Möglichkeiten, die FXMLLoader-Verarbeitung zu protokollieren oder zu diagnostizieren?Hat jemand einen benutzerdefinierten FXMLLoader geschrieben, der auf diese Weise verwendet werden könnte? (siehe Nr. 3).Ich habe gesehen, dass FXML SAX verwendet. Ist es möglich, den Parser zu verpacken oder zu verknüpfen und dem FXMLLoader einen alternativen Parser zu geben?Gibt es statische Tools zur Analyse der FXML - und Java - Anwendung?FXML Lint oder so?Welche detaillierten FXML-Lade-, Analyse- und Laufzeitinformationen darüber verfügbar sind, wie die FXML verarbeitet wird.Gibt es oder könnten einige zusätzliche Einstiegspunkte hinzugefügt oder in die Controller eingefügt werden, um FXML-Ladeprobleme zu erfassen?Können Controller beispielsweise so kaskadiert werden, dass ich einen "Root-Controller" erstellen kann, der Probleme näher am Ursprungspunkt erfasst.

Derzeit sind Probleme innerhalb der FXML, die nur zum Zeitpunkt des Ladens aufgedeckt werden, nur zeitaufwändig und unvorhersehbar, wenn die Editoren nichts sehen. Ich würde gerne einige Diagnosewerkzeuge sehen, wenn jemand h

Weitere Einblicke

Dies sind einige relevante 'Debuggen' und 'Fehlerbehebung'Tipps, die während der Entwicklung mitkommen. Vielleicht finden einige davon eines Tages ihren Weg in einen FXML-Validator oder ein Lint-Tool. (?) Die Punkte sind in keiner bestimmten Reihenfolge, sie sind zu Querverweiszwecken nummeriert.

Alle Controller-IDs in der FXMLmuss sein Präsentieren und kommentieren Sie den Java-Code mit @FXML. Wenn eine Anmerkung fehlt, wird die FXML nicht geladen.Jeder mit @FXML kommentierte Java-Name sollte in der FXML-Markup-Datei enthalten sein. Sagen Sie ein Label mit dem Namen "myLabel": Wenn das im Code verwendete myLabel eine NullPointerException enthält. Die Datei wird im Gegensatz zu Fall 1 geladen.Verwenden Sie nicht die NetBeans-Kompilierungsoption "Compile on Save" mit JavaFX. Es scheint auf scheinbar korrektem Code falsche NullPointerException-s zu erzeugen.Wenn Sie Ihre Haupt-App umbenennen / umgestalten, stellen Sie sicher, dass Sie das Build-Ziel (z. B. Maven oder Ant) aktualisieren. Einige IDE-Refactor-Codes können diesen Link übersehen.

FXMLLoader () gibt Ihnen einen Hinweis. Wenn Sie die Ausnahme abfangen, können Sie sich "getMessage ()" ansehen ...

catch( Exception ex ){
       System.out.println("Exception on FXMLLoader.load()");
       System.out.println( ex.getMessage() );   //-- Doesn't show in stack dump
}

Überprüfen Sie Ihre Eingabe in FXML-Ressourcen. Kleine Tippfehler sind der Teufel zu identifizieren und zu erkennen. Dies gilt für alle Zeichenfolgen, die nicht von einem Compiler oder Lint überprüft werden, nicht nur für FXML.

// These two line are not the same:
Parent root;
root = FXMLLoader.load(getClass().getResource("Samplle.fxml"));
root = FXMLLoader.load(getClass().getResource("Sample.fxml"));

Dort ist exception.getMessage (): "Standort erforderlich", für diesen Tippfehler in # 6.

Wenn Sie die FXML manuell bearbeiten, müssen Sie dies sicherstellen alle relevanten Komponenten.

Denken Sie daran, den FXML-Namespace in "-d" -Dateien einzuschließen, z. auf dem äußersten XML-Element benötigt.

<TreeView id="treeView" fx:id="tree" xmlns:fx="http://javafx.com/fxml" ... >

Hoffe etwas hilft. Dies sind Vermutungen, die auf kleinen Tests und Versuchen beruhen. Bitte korrigieren Sie eingebettete Annahmen von Missverständnissen darüber, wie die Dinge laufentatsächlich Arbeit.

siehe auch:

JavaFX - Fehler beim Laden der FXML-DateiAndroid-Diagnosetool für Anwendungen (Anwendungsfall)Ich möchte FXMLLoader überschreiben. Wie kann ich das machen?Wie lädt FXMLLoader den FXML-Controller?Kann den fxml-Fehler für JavaFX nicht finden (Anwendungsfall)Klasse javafx.fxml.FXMLLoaderJavaFX-Architektur (PDF verfügbar) Leider gibt es hier nichts über FXML.Einführung in FXMLFXMLLoader.java-Quellcode

Antworten auf die Frage(2)

Ihre Antwort auf die Frage