मैं जावा में प्रतिबिंब का उपयोग करने की कोशिश कर रहा हूं लेकिन मुझे एक अजीब त्रुटि मिल रही है। क्या संभव मुद्दे हैं जब मैं एक त्रुटि मिलेगा जिसमें बताया गया:कॉल डायनामिक विधियों का उपयोग करते समय IllegalAccessException
java.lang.IllegalAccessException: Class com.myapp.core.utils.EventDispatcher can not access a member of class appApp$1 with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
मैं बस अपना खुद का EventDispatcher वर्ग और इसके अंदर, बात यह है कि मैं प्रतिबिंब का इस्तेमाल किया है, जो भी कोड की पंक्ति है बनाने का प्रयास करते है कि का कारण बनता है समस्या है:
public void dispatchEvent(Event e, String callMethName) {
IEventListener list = ((IEventListener)listeners[i]);
list.getClass().getMethod(callMethName, Event.class).invoke(list, e);
}
अपने मुख्य वर्ग पर, मैं कुछ है कि addListener कॉल जो सिर्फ इस तरह से EventDispatcher कक्षा में एक सूची में श्रोता जोड़ देगा है:
try {
obj.addListener("onTestHandler", new MyTestEventListener(){
@Override
public void onTestHandler(Event e) {
System.out.println("hello!");
}
});
} catch (SecurityException e) {
e.printStackTrace();
}
तो पहला पैरामीटर जो "ऑनस्टेन्डलर" कहता है, EventDispatcher क्लास में और अंततः पैरामीटर कॉलमेथनाम के हिस्से के रूप में प्रेषण विधि में होगा, जो विधि को गतिशील रूप से कॉल करेगा।
विधियों का मार्ग और सबकुछ सही है। यह वह हिस्सा है जिसमें किसी भी तरह की प्रतिबिंब है। ऐसा लगता है कि विधि ढूंढने में सक्षम है। लेकिन किसी कारण से, एक अवैध एक्सेस अपवाद फेंकता है और विधि को कॉल नहीं कर सकता है।
ऐसा क्यों है?
धन्यवाद।
इन सभी छोटी बिट्स को एक साथ सिलाई करने में काफी भ्रमित है। यह सब कुछ हल करने के लिए * अधिक * आसान होगा यदि आप समस्या का प्रदर्शन करने वाला एक छोटा लेकिन * पूरा * कार्यक्रम प्रदान कर सकें। यह आपके असली ऐप को करने की ज़रूरत नहीं है - इस मुद्दे को प्रदर्शित करने के लिए पर्याप्त है। –
आपको अधिक जानकारी के लिए पुस्तक [जावा पज़लर] (http://www.javapuzzlers.com/) से गूढ़ व्यक्ति 'प्रतिबिंब इन्फ्लिक्शन' देखना चाहिए। वह विशिष्ट गूढ़ व्यक्ति [पुस्तक के ऑनलाइन नमूने] में उपलब्ध है (http: //www.javapuzzlers।com/जावा-पहेलियों-sampler.pdf)। –
धन्यवाद रिचर्ड, नमूना अध्याय त्रुटि को समझने में बहुत मददगार है! – Carven