2013-05-12 11 views
10

मैं एक संवाद खिड़की कि निम्न कोड से शुरू हो जाती है (DialogController मॉडल संवाद खिड़कियों प्रयोग करने के लिए एक सहायक वर्ग है, यह मुख्य रूप से अपनी खिड़की के साथ एक नियंत्रक संदर्भ एक साथ बंडल) है:JavaFX IllegalAccessException()

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 नियंत्रक वर्ग है:

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 में नियंत्रक वर्ग का नाम मेरी जावा फ़ाइल जैसा ही है और यह ठीक से योग्य है। त्रुटि initialize() से पहले होती है, इसलिए मुझे नहीं लगता कि यह initialize() के साथ कुछ भी है, हालांकि मैंने यह सुनिश्चित करने के लिए जांच की है कि इसे @FXML के साथ भी टैग किया गया है।

मेरी नियंत्रक वर्ग के लिए कंकाल की नकल की और दृश्य से चिपकाया बिल्डर गया था ... मुझे यकीन है कि वहाँ एक नियंत्रण मैं याद आ रही थी नहीं था होना करने के लिए दृश्य बिल्डर से सामान के ब्लॉक वापस चला गया और repasted गए मेरी जावा फाइल में

त्रुटि संदेश मुझे उस सदस्य के बारे में कोई विशिष्ट जानकारी नहीं देता है जिसमें इसकी समस्या है, इसके अलावा यह कहना है कि इसमें संशोधक हैं ""। मैं अपने नियंत्रक वर्ग में वापस गया और सभी सदस्यों को डिफ़ॉल्ट पहुंच public के साथ बनाया, और मुझे अभी भी त्रुटि मिल गई है।
मुझे यह भी नहीं पता कि मेरी कक्षा में समस्या कहां से आ रही है। किसी के पास कोई गलत विचार है कि यहां क्या गलत हो रहा है?

उत्तर

21

फिर भी एक और शर्मनाक सरल समस्या।

मुझे आश्चर्य है कि किसी ने अब तक इस पर कूद नहीं किया है।

समस्या मेरी कक्षा DCServRecEditor में थी। ध्यान दें कि वर्ग को default एक्सेस अनुमति के साथ घोषित किया गया था।

जावाएफएक्स की आवश्यकता है कि नियंत्रक वर्ग public बनाया जाए।

मेरे लिए उचित होने के लिए, इस स्थिति में जावा की त्रुटि रिपोर्टिंग घृणास्पद और भ्रामक है। स्टैक ट्रेस स्पष्ट रूप से दिखाता है कि जावा मेरी कक्षा के सदस्य तक पहुंचने में असमर्थ होने के बारे में शिकायत कर रहा है, इसलिए मेरे उदाहरण फ़ील्ड और विधियों पर मेरा ध्यान केंद्रित है। जावा वास्तव में शिकायत करनी चाहिए थी कि यह कक्षा ही थी कि वह अपने सदस्यों तक नहीं पहुंच सका।

+0

स्कॉट मुझे लगता है कि आपको सही उत्तर के रूप में अपना उत्तर चिह्नित करने में सक्षम होना चाहिए। – jewelsea

+0

अनुस्मारक के लिए धन्यवाद।यह कहता है कि मुझे कल तक इंतजार करना है। – scottb

+1

एक ही त्रुटि से मैंने एक टेबल व्यू तत्व –

-6

मैं हर विधि घोषित करना और सार्वजनिक दायर करना पसंद करता हूं।

 संबंधित मुद्दे