2011-05-30 22 views
10

द्वारा फेंक दिया गया है मैं कस्टम क्लास लोडर का उपयोग कर कक्षाएं लोड कर रहा हूं। अधिकांश भाग के लिए, सब कुछ काम करता है, लेकिन कभी कभी जब मैं विशेष रूप से जटिल परियोजनाओं/पुस्तकालयों लोड करते हैं, मैं एक अजीब बग मिलती है:ClassCircularityError ClassLoader.defineClass

Exception in thread "main" java.lang.ClassCircularityError: 
    org/apache/commons/codec/binary/Hex 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:466) 
    at my.custom.class.Loader.loadClass(...) 

Javadocs को देखते हुए, मैं defineClass इस विशेष त्रुटि फेंक करने की उम्मीद नहीं होता। org/apache/commons/codec/binary/Hex वह वर्ग है जिसे मैं लोड करने की कोशिश कर रहा हूं। यह लगभग defineClass वर्ग की एक प्रति चाहता है इससे पहले कि वह कक्षा को परिभाषित करे - जो मुझे कोई समझ नहीं आता है।

विचार?

+1

क्या आप अपना कोड दिखा सकते हैं? क्या आपने अभी सुझाए गए findClass() को ओवरराइट किया था? अन्यथा आपको सब कुछ ठीक करने के लिए सावधान रहना होगा। – Voo

+0

* यह कक्षा को परिभाषित करने से पहले वर्ग की प्रतिलिपि चाहता है, कक्षा वर्ग को परिभाषित करने से पहले, यह कक्षा की एक प्रति नहीं चाहता है। और आपने पैकेज नाम 'कक्षा' को परिभाषित करने में कैसे कामयाब रहे? – bestsss

+0

@bestsss संभवतः स्टैक ट्रेस पैकेज नामों की खराब पसंद के साथ खराब हो गया है –

उत्तर

11

ClassCircularityError फेंक दिया जाता है जब कुछ वर्ग स्वयं (अप्रत्यक्ष) सुपरक्लास स्वयं होता है, कुछ इंटरफ़ेस (परोक्ष रूप से) स्वयं या समान होते हैं।

यह आमतौर पर ऐसा नहीं होना चाहिए क्योंकि एक अच्छी तरह से व्यवहार किए गए कंपाइलर ऐसे वर्गों का उत्पादन नहीं करेगा, लेकिन पुस्तकालय के विभिन्न संस्करणों का उपयोग (या कक्षा के विभिन्न संस्करणों वाले कई पुस्तकालयों का उपयोग करके) इस समस्या को ला सकता है।

डबल पुस्तकालय नामों के लिए अपने पुस्तकालयों को स्कैन करें, विशेष रूप से देखें कि org.apache.commons.codec.binary.Hex कक्षा के कई संस्करण हैं या नहीं।

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

  • कोई संबंधित समस्या नहीं^_^