2013-02-14 19 views
7

पर शून्य वापस लौटाता है हाल ही में मैं getResourceAsStream विधि के बहुत अजीब व्यवहार में आया था।विधि getResourceAsStream ubuntu

मेरे पास एक ऐसा एप्लिकेशन है जिसे मैंने विंडोज़ पर विकसित किया है। यह ऐप ओएसजीआई ढांचे के आधार पर एक डेस्कटॉप एप्लीकेशन है। मैंने एक बंडल बनाया, आवश्यक पैकेज सेट अप किए और उन पैकेजों में कुछ डेटा फ़ाइलों को जोड़ा ताकि वे जार फ़ाइल में निहित हों।

मुझे लगता है कि का उपयोग कर डेटा लोड:

this.getClass().getResourceAsStream("pl/com/myapp/resource.dat"); 

यह दोनों ग्रहण करने में बहुत काम किया है और जब मैं अपने आवेदन तैनात और आईडीई के बाहर प्रणाली पर चला।

तब मैंने विकास को उबंटू 12.04 में स्थानांतरित कर दिया। मेरे आश्चर्य की बात है कि ऊपर वर्णित विधि हमेशा शून्य लौटती है। डेटा वह जगह है जहां यह होना चाहिए। सभी सेटिंग्स ठीक दिखती हैं। किसी भी विन्यास फाइलों में कोई पूर्ण पथ नहीं।

मैंने कई अलग-अलग चीजों की कोशिश की। मैं करने के लिए पथ बदल दिया:

this.getClass().getResourceAsStream("/pl/com/myapp/resource.dat"); 

मैं पैकेज जड़ होते हैं लेकिन एक रास्ता है कि वर्ग स्थान के सापेक्ष है सम्मिलित करने के लिए (: pl.com.myapp.MyClass मान की सुविधा देता है कि मेरी कक्षा है): नहीं की कोशिश की

this.getClass().getResourceAsStream("resource.dat"); 

मैं भी करने की कोशिश की:

this.getClass().getResourceAsStream("./resource.dat"); 

लेकिन कुछ भी नहीं :(

काम किया लेकिन जब मैं एक बनाने सरल जावा एप्लिकेशन सब कुछ सुचारू रूप से काम करता है और विधि उचित स्ट्रीम देता है।

क्या कोई ऐसी समस्याओं के पार आया?

मैं उबंटू 12.04 पर ग्रहण-जूनो का उपयोग करता हूं।

उत्तर

2

बस एक अनुमान है, लेकिन क्या यह संभव है कि this.getClass() वह वर्ग नहीं है जिसे आप सोचते हैं? उदाहरण के लिए यदि कोई आपको उप-वर्ग बनाता है तो this.getClass() आपके बेसक्लास की बजाय सबक्लास लौटाएगा, जो कि किसी अन्य बंडल में हो सकता है और इसलिए संसाधन की दृश्यता नहीं होगी।

इस तरह के संसाधन लुकअप करते समय आपको हमेशा शाब्दिक वर्ग के नाम का उपयोग करना चाहिए, उदाहरण: MyClass.class.getResourceAsStream()

+0

नहीं, यह संभव नहीं है। डेटा लोड करने वाली विधि किसी भी अन्य वर्ग द्वारा ओवरराइड की जाती है। कक्षा स्वयं किसी अन्य के लिए एक सुपरक्लास नहीं है। –

+1

ठीक है लेकिन क्या आप कम से कम 'MyClass.class.getResourceAsStream()' पैटर्न को यह सत्यापित करने के लिए प्रयास कर सकते हैं कि यह वही व्यवहार है? –

+0

ठीक है मैंने इसे चेक किया है और यह या तो मदद नहीं करता है। वही परिणाम - शून्य वापस आ रहा है। –

3

केस संवेदनशीलता पर सावधान रहें क्योंकि विंडोज़ की तुलना में लिनक्स पथ केस संवेदनशील हैं।

+0

मुझे 100% यकीन है कि मामले सही हैं। मैं हमेशा पैकेज नामों में और मेरे द्वारा बनाए गए डेटा वाले फ़ाइलों में कम केस का उपयोग करता हूं। –