gpt4 book ai didi

javafx-2 - FXML 加载期间的 JavaFX IllegalAccessException()

转载 作者:行者123 更新时间:2023-12-03 23:20:56 25 4
gpt4 key购买 nike

我有一个由以下代码调用的对话框窗口(DialogController 是使用模态对话框窗口的帮助器类;它主要将 Controller 引用与其窗口捆绑在一起):

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

我的类 DCServRecEditorDialogController 的子类.这是一个非常普通的 FXML Controller 类:
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 中没有命名控件在 Controller 类中也没有实例字段。
所有实例字段都标记为 @FXML .

FXML 中 Controller 类的名称与我的 java 文件相同,并且已正确限定。
错误发生在 initialize() 之前被调用,所以我认为这与 initialize() 无关,虽然我已经检查以确保它也被标记为 @FXML .

我的 Controller 类的骨架是从 Scene Builder 中复制和粘贴的……我已经返回并重新粘贴了 Scene Builder 中的内容块,以确保在我的 java 文件中没有我缺少的控件。

错误消息没有给我任何关于它有问题的成员的细节,只是说它有修饰符“”。
我回到我的 Controller 类并让所有成员都具有默认访问权限 public ,我仍然收到错误消息。
我什至不知道我类哪里出了问题。
有人对这里出了什么问题有任何想法吗?

最佳答案

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

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

问题出在我的类(class) DCServRecEditor .请注意,该类是用 default 声明的。访问权限。

JavaFX 要求制作 Controller 类 public .

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

关于javafx-2 - FXML 加载期间的 JavaFX IllegalAccessException(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16504300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com