I ein Dialogfenster, die durch den folgenden Code aufgerufen wird (DialogController
ist eine Hilfsklasse für modales Dialogfenster verwenden, es bündelt hauptsächlich eine Steuerungsreferenz mit seinem Fenster zusammen):JavaFX Illegal während FXML Last()
void handleServicesEdit(ActionEvent event) throws IOException {
DCServRecEditor sre = DialogController.<DCServRecEditor>loadFXML(
CensusAssistant.RES_FXML_DIALOG_SERVEDIT,
CensusAssistant.RES_STRING_SERVEDIT,
this.getDialog());
sre.setDialogMode(DB.DBEDIT_MODE_EDIT,
tbvService.getItems(),
tbvService.getSelectionModel().getSelectedIndex(),
m_encCal);
sre.showAndWait();
sre.release();
this.updateGUI();
}
Ich habe bestätigt, dass ich eine Ausnahme während der FXMLLoader.load()
Methode bekomme. Ich habe auch festgestellt, dass der Fehler auftritt, bevor Code in meiner initialize()
-Methode eine Chance hat, auszuführen. Einige der Stack-Trace, die ich von load()
bekommen, ist hier:
java.lang.IllegalAccessException: Class sun.reflect.misc.ReflectUtil
can not access a member of class org.kls.md.censusassistant.DCServRecEditor
with modifiers ""
file:/D:/Documents/NetBeansProjects/CensusAssistant/dist/run1284250063/CensusAssistant.jar!/org/kls/md/censusassistant/fxml/GUIServRecEditor.fxml:13
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:738)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:775)
at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:180)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:563)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2314)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2131)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
at org.kls.md.censusassistant.DialogController.loadFXML(DialogController.java:63)
at org.kls.md.censusassistant.DCMainEditor.handleServicesEdit(DCMainEditor.java:330)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
Caused by: java.lang.IllegalAccessException: Class sun.reflect.misc.ReflectUtil
can not access a member of class org.kls.md.censusassistant.DCServRecEditor
with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95)
at java.lang.Class.newInstance0(Class.java:368)
at java.lang.Class.newInstance(Class.java:327)
at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:46)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:731)
... 66 more
Meine Klasse DCServRecEditor
eine Unterklasse von DialogController
ist. Es ist eine ziemlich normal aussehende FXML Controller-Klasse:
class DCServRecEditor extends DialogController {
private int m_dialogMode = DB.DBEDIT_MODE_ADD;
private int m_selServ = -1;
private GregorianCalendar m_cal = null;
@FXML // ResourceBundle that was given to the FXMLLoader
private ResourceBundle resources;
@FXML // URL location of the FXML file that was given to the FXMLLoader
private URL location;
@FXML // fx:id="ancMatchSelector"
private AnchorPane ancMatchSelector; // Value injected by FXMLLoader
@FXML // fx:id="ancServEditor"
private AnchorPane ancServEditor; // Value injected by FXMLLoader
@FXML // fx:id="ancServRecEditor"
private AnchorPane ancServRecEditor; // Value injected by FXMLLoader
...
}
Ich habe doppelt und dreifach überprüft, um sicherzustellen, dass es in der FXML keine genannte Kontrolle war, die nicht auch eine Instanz Feld in der Controller-Klasse hatte . Alle Instanzfelder sind mit @FXML
gekennzeichnet.
Der Name der Controller-Klasse in der FXML ist der gleiche wie meine Java-Datei und ist ordnungsgemäß qualifiziert. Der Fehler tritt auf, bevor initialize()
aufgerufen wird, also glaube ich nicht, dass es irgendetwas mit initialize()
ist, obwohl ich überprüft habe, um sicherzustellen, dass es auch mit @FXML
getaggt ist.
Das Skelett für meine Controller-Klasse kopiert und von Szene Builder eingefügt wurde ... Ich habe wieder und repasted Blöcke von Sachen aus Scene Builder sicher sein gegangen, dass es keine Kontrolle war ich fehlte in meiner Java-Datei.
Die Fehlermeldung gibt mir keine Details über das Mitglied, mit dem es ein Problem hat, außer zu sagen, es hat Modifikatoren "". Ich ging zurück zu meiner Controller-Klasse und machte alle Mitglieder mit Standardzugriff public
, und ich bekomme immer noch den Fehler.
Ich weiß nicht einmal, wo in meiner Klasse das Problem herkommt. Hat jemand irgendwelche Ideen, was hier schief läuft?
Scott Ich denke, Sie sollten in der Lage sein, Ihre eigene Antwort als die richtige Antwort zu markieren. – jewelsea
Danke für die Erinnerung.Es sagt, ich muss bis morgen warten. – scottb
Mit dem gleichen Fehler verpasste ich eine @ FXML-Annotation eines TableView-Elements –