FXML负载期间的JavaFX IllegalAccessException()(JavaFX Il

2019-09-02 16:48发布

我具有由下面的代码调用的对话窗口( DialogController是使用模态对话框窗口一个辅助类;它主要捆绑在一起的控制器参考以其窗口):

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();
}

我已经证实,我的过程中得到一个异常FXMLLoader.load()方法。 我也确定,在我的代码之前发生错误initialize()方法有机会运行。 一些堆栈跟踪,我从获得的load()是在这里:

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

我班DCServRecEditor是的子类DialogController 。 这是一个非常正常的期待FXML控制器类:

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

        ...
}

我有双重和三重检查,以确保有没有在FXML一个名为控件,也没在控制器类的实例字段。 所有的实例字段都标有@FXML

在FXML控制器类的名字是一样的我的Java文件,并适当资格。 之前出现的错误initialize()被调用,所以我不认为这是与任何initialize()虽然我已经检查,以确保它也被标记为@FXML

我的控制器类的框架被复制和场景生成器粘贴......我回去和repasted从场景生成器的东西块,以确保有没有我在我的Java文件中缺少控制。

该错误消息没有给我的具体信息是具有与它的问题的成员,只是说有修饰语“”。 我回到我的控制器类,并取得所有默认访问成员public ,而我仍然得到错误。
我甚至不知道在我的课的问题的根源。 任何人有什么错误这里有什么想法?

Answer 1:

另一个令人尴尬的简单的问题。

我很惊讶,有人没有现在这个跳跃。

这个问题在我的课DCServRecEditor 。 请注意,该类是用声明的default访问权限。

JavaFX的要求控制器类进行public

要对得起自己,在这种情况下,Java的错误报告是恶劣的和误导性的。 堆栈跟踪清楚地表明,Java正在抱怨我的实例字段和方法是无法访问我班的一员,所以我的重点。 Java的真的应该抱怨说,它是类本身,它无法访问,而不是其成员。



Answer 2:

我宁愿声明每个方法和提起公益。



文章来源: JavaFX IllegalAccessException during FXML load()