FXML load()期间的JavaFX IllegalAccessException

sco*_*ttb 13 javafx javafx-2 illegalaccessexception fxml

我有一个由以下代码调用的对话框窗口(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();
}
Run Code Online (Sandbox Code Playgroud)

我已确认在该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
Run Code Online (Sandbox Code Playgroud)

我的班级DCServRecEditorDialogController.这是一个非常正常的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

        ...
}
Run Code Online (Sandbox Code Playgroud)

我进行了双重和三重检查,以确保FXML中没有一个命名控件,在控制器类中也没有实例字段.所有实例字段都标有@FXML.

FXML中控制器类的名称与我的java文件相同,并且是合格的.错误发生在initialize()调用之前,所以我不认为它是什么initialize(),虽然我已经检查以确保它也被标记@FXML.

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

错误消息没有给我关于它有问题的成员的具体信息,除了说它有修饰符"".我回到我的控制器类并使所有成员都具有默认访问权限public,我仍然得到错误.
我甚至不知道我班上的问题来自哪里.任何人对这里出了什么问题都有任何想法?

sco*_*ttb 32

又一个令人尴尬的简单问题.

我很惊讶有人现在没有跳过这个.

问题出在我班上DCServRecEditor.请注意,该类已声明具有default访问权限.

JavaFX要求创建控制器类public.

为了公平起见,Java在这种情况下的错误报告是可恶和误导的.堆栈跟踪清楚地表明Java抱怨无法访问我的类的成员,因此我专注于我的实例字段和方法.Java真的应该抱怨它无法访问它本身的类本身而不是它的成员.