Tôi có một cửa sổ hộp thoại được gọi bằng đoạn mã sau (DialogController
là một lớp helper cho việc sử dụng cửa sổ hộp thoại modal, nó chủ yếu bó cùng một tài liệu tham khảo điều khiển với cửa sổ của nó):JavaFX IllegalAccessException trong tải FXML()
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();
}
Tôi đã xác nhận rằng tôi nhận được ngoại lệ trong phương thức FXMLLoader.load()
. Tôi cũng đã xác định rằng lỗi xảy ra trước khi bất kỳ mã nào trong phương thức initialize()
của tôi có cơ hội chạy. Một số vết đống mà tôi nhận được từ load()
là ở đây:
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
Lớp học của tôi DCServRecEditor
là một lớp con của DialogController
. Đây là lớp điều khiển FXML khá bình thường:
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
...
}
Tôi đã kiểm tra gấp đôi và ba để đảm bảo rằng không có điều khiển được đặt tên trong FXML cũng không có trường thể hiện trong lớp điều khiển . Tất cả các trường mẫu được gắn thẻ với @FXML
.
Tên của lớp bộ điều khiển trong FXML giống với tệp java của tôi và đủ điều kiện. Lỗi xảy ra trước khi initialize()
được gọi, vì vậy tôi không nghĩ rằng nó là bất cứ điều gì với initialize()
, mặc dù tôi đã kiểm tra để đảm bảo nó cũng được gắn thẻ với @FXML
.
Bộ xương cho lớp điều khiển của tôi đã được sao chép và dán từ Scene Builder ... Tôi đã đi lại và repasted khối thứ từ Scene Builder để chắc chắn rằng không có một điều khiển tôi nhớ da diết trong tệp java của tôi.
Thông báo lỗi cho tôi không có thông tin cụ thể về thành viên đang gặp sự cố, ngoài việc nói nó có công cụ sửa đổi "". Tôi quay trở lại lớp điều khiển của mình và thực hiện tất cả các thành viên với quyền truy cập mặc định public
và tôi vẫn gặp lỗi.
Tôi thậm chí không biết nơi nào trong lớp của tôi vấn đề phát sinh. Bất cứ ai có bất kỳ ý tưởng về những gì đang xảy ra ở đây?
Scott Tôi nghĩ bạn có thể đánh dấu câu trả lời của chính mình làm câu trả lời đúng. – jewelsea
Cảm ơn lời nhắc.Nó nói tôi phải chờ đến ngày mai. – scottb
Bởi cùng một lỗi, tôi đã bỏ lỡ chú thích @FXML của một phần tử TableView –