Skip to main content
Entwickler Themen
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Fehlersuche und Laufzeitgrenzen

Zunächst die Anwendung außerhalb des Designers bauen und starten. So lassen sich Laufzeit-, Injection- und FXML-Probleme von Fehlern der Editor-Projektion trennen. Die Bibliothek ist ein Entwicklungssnapshot; einzelne Fehler haben noch keine vereinheitlichte Diagnose.

Build und Start

Beobachtung Prüfung
fx-SNAPSHOT oder Parent nicht auflösbar Reactor lokal installieren; beide Projekte müssen dasselbe lokale Maven-Repository verwenden
No plugin found for prefix 'javafx' Ziel nur am Anwendungs-POM ausführen, nicht mit -am am Library-Parent
JavaFX-/Native-Fehler JDK, Architektur und tatsächlich aufgelöste Plattformartefakte prüfen; Versionen nicht mischen
getResource liefert null Paketpfad, Großschreibung und Kopie nach target/classes kontrollieren
Maven meldet Erfolg trotz fehlender Funktion Surefire-XML prüfen; der Parent ignoriert Testfehler
Modulstart scheitert, Classpath funktioniert requires/opens und Service-Registrierung am tatsächlichen Module-Path-Start prüfen

Bindings und Components

Meldung oder Symptom Bedeutung
No control ... Binding-Ziel hat keine passende fx:id
No property ... Öffentliche nameProperty()-Methode fehlt
did not return a property Zielmethode liefert keine Property
No read-write attribute for path ... Attribut/Pfad ungeeignet; Getter und Setter prüfen
Not a direction: Expliziter Wert ist nicht view/model/both
NullPointerException bei Richtung Richtung wurde möglicherweise ausgelassen; kein Default vorhanden
Not a binding element: BindingList enthält einen unbekannten Deklarationstyp
Not a converter: oder No converter Klasse fehlt beziehungsweise implementiert Converter nicht
No computed method ... Öffentliche parameterlose Controller-Methode fehlt
No controller for Computed hat keinen geeigneten Controller
Could not call Computed-Aufruf warf eine Exception; Ursache ansehen
No constructor taking the Model on ... Gewähltes ViewModel hat keinen passenden Ein-Argument-Konstruktor
ViewModel is ... but the View names ... Spätere View verlangt einen zur bestehenden Instanz inkompatiblen Typ
View is bound to ... getViewModel auf einem Ersatzobjekt ohne ViewModel-Basisklasse; property verwenden
No component document ClassName.fxml fehlt neben der Component-Klasse
No model property on modelProperty-Methode fehlt
modelProperty did not return a property Model-Methode liefert ungeeigneten Typ
Node besitzt bereits einen Parent Derselbe Component-Singleton wurde in unabhängigen Views wiederverwendet

Die Root-Node einer geladenen View muss Parent sein. FXML-Fehler werden außerdem durch den FXMLLoader mit ihrer Ursache gemeldet. Unbekannte Component-Eigenschaften oder nicht konvertierbare Attribute sind keine still ignorierten Designer-Metadaten.

Repeat und Table

Meldung Ursache
No collection ... Fehlende oder nicht als ObservableList verfügbare Collection
A table needs a column Keine Column deklariert
A column needs a header and an attribute Pflichtangabe fehlt oder Header ist leer
Attribute ... is used twice Doppelte Column für ein Attribut
Attribute ... is not a simple value Komplexes Attribut als Column verwendet
Column ... needs a positive width Breite ist nicht positiv und endlich
No row ... Row-Klasse fehlt
Row is not a node: Row hat ungeeigneten Basistyp

Für Repeat muss das Ziel eine Pane sein. Collection-Pfade sind keine allgemeine punktierte Pfadauflösung wie DirectBinding; eine direkte Property des aktuellen ViewModels verwenden. Collections vor dem Laden initialisieren. Die Injection-Diagnose erklärt, warum eine vorhandene Klasse trotzdem nicht vom Kontext erzeugt werden kann.

Wenn Änderungen nicht erscheinen

Ein direkt aufgerufener Model-Setter wird nicht beobachtet. Eine nicht beobachtbare alte Listenreferenz sendet keine JavaFX-Listenereignisse. Ein ausgetauschtes Zwischenobjekt verbindet einen bestehenden punktierten Pfad nicht neu. Eine Component bindet sich nur beim ersten nicht-null Model. Permutationen und reine Collection-Update-Ereignisse sind nicht implementiert. Diese Fälle benötigen eine passende Aktualisierung über Properties beziehungsweise einen neu aufgebauten View-/Component-Lebenszyklus.

Die Runtime ist kein transaktionales Formularsystem: Ein Binding schreibt unmittelbar. Eigene Entwürfe, fachliche Validierung, Persistenz und Abbrechen/Rollback liegen in der Anwendung. Table ist nicht virtualisiert. Der globale Model-Cache besitzt keine öffentliche Freigabe, und LoadedView kein Unbind-all. Lang laufende Anwendungen und viele kurzlebige Fenster müssen diese Lebensdauergrenzen ausdrücklich berücksichtigen.