2012-08-24 17 views
6

जब मैं ImageIcon वर्ग ऑब्जेक्ट मैं निम्नलिखित कोड का उपयोग बनाने के लिए:getClass का उपयोग कैसे करें() getResource() विधि

iconX = new ImageIcon (getClass().getResource("imageX.png")) 

ऊपर कोड या तो एक एप्लेट या एक डेस्कटॉप में ठीक से काम करता ऐप जब .png कक्षा के उसी फ़ोल्डर में है।

सवाल यह है कि: NullPointerException से बचने के लिए कैसे करें जब .Png किसी अन्य फ़ोल्डर में है? या ऑब्जेक्ट में छवि को ImageIcon में लोड करें जब यह कक्षा के किसी भिन्न स्थान पर हो?

मुझे समझ में नहीं आता कि यह विधि कैसे काम करती है, अगर कोई मेरी मदद कर सकता है तो मैं इसकी सराहना करता हूं। धन्यवाद!!

उत्तर

1

बस संसाधन के लिए पथ की आपूर्ति करें।

इसलिए, यदि आप में छवि डाल "/ संसाधन/छवियों" अपने जार के अंदर, तो आप बस

iconX = new ImageIcon(getClass().getResource("/resources/images/imageX.png")) 

का प्रयोग करेंगे आप अनिवार्य रूप क्या कह रहे हैं, वर्ग लोडर, के लिए अपनी कक्षा पथ खोज करें निम्नलिखित संसाधन।

1

यदि छवि आंतरिक है (यदि आप अपने प्रोजेक्ट में कोई स्थान रिश्तेदार चाहते हैं, या शायद अपने जार में पैक), क्या पागल प्रोग्रामर कहा कार्य करें:

iconX = new ImageIcon(getClass().getResource("/path/imageX.png")) 

पथ रिश्तेदार है, इसलिए पथ/हो जाएगा आपके प्रोजेक्ट के समान फ़ोल्डर में एक फ़ोल्डर (या आपके जार में पैक किया गया)।

यदि आप बाहरी छवि चाहते हैं, तो बस छवि आइकन कन्स्ट्रक्टर को पथ (उदा। "सी: /.../ file.png") हाथ दें। हालांकि इसकी अनुशंसा नहीं की जाती है, क्योंकि इसे संसाधन के रूप में उपयोग करना बेहतर होता है।

छवि आइकन कन्स्ट्रक्टर पर अधिक जानकारी के लिए, here देखें। लोड हो रहा है वर्ग संसाधनों पर अधिक जानकारी के लिए, here (जावाडोक लिंक) को देखने के

+0

ठीक है आप संसाधन फ़ोल्डर के बारे में सही हैं, इस तरह से बेहतर है। मैंने फ़ाइल के पूर्ण पथ को क्लासपाथ में एक अलग फ़ोल्डर में करने की कोशिश की और एक nullPointerExceptioin भी प्राप्त किया। मैं निम्नलिखित कोड का उपयोग कर रहा हूं: imageX = new ImageIcon (getClass()। GetResource ("सी: /Users/JP/Desktop/applet/iconX.png")); और काम नहीं करता! – user1621598

4

इस पर एक नजर डालें - Class#getResource(java.lang.String)

ऊपर के लिंक पर क्लिक करें और डॉक्स पढ़ने और समझने में क्या हो रहा है का पालन करें।

इसे कहते हैं -

नाम एक '/', तो पूर्ण संसाधन के नाम के साथ शुरू होता है, तो निम्न '/' नाम का हिस्सा है।

 modified_package_name/name 

कहाँ modified_package_name के पैकेज के नाम '/' 'के लिए प्रतिस्थापित के साथ इस वस्तु है:

और

अन्यथा, पूर्ण नाम निम्न रूप में है । '।

तो, अगर इस वस्तु (जहां getResource कहते हैं) पैकेज /pkg1 में है (/ अर्थ pkg1 सही classpath की जड़ किया जा रहा है) और आप का इस्तेमाल किया "imageX.png" तो परिणाम pkg1/imageX.png होगा जो सही है क्योंकि वह जगह है जहां छवि स्थित है।

लेकिन, अगर हम कुछ अन्य पैकेज /pkg2 लिए संसाधन (imageX.png) चले गए और आप विधि उसी तरह कहा जाता है तो परिणाम अभी भी pkg1/imageX.png होगा, लेकिन इस बार यह सही नहीं होगा और क्योंकि संसाधन वास्तव में /pkg2 में स्थित है । यही वह समय है जब आप एनपीई के साथ खत्म होते हैं।

क्लासपाथ की जड़ से शुरू होने वाले संसाधन का पूरा पथ स्पष्ट रूप से निर्दिष्ट करना अच्छा है। (उदाहरण के लिए "/pkg/imageX.png")।

उम्मीद है कि इससे मदद मिलती है।

+0

वास्तव में, यह मदद करता है। धन्यवाद, मैं समझता हूं कि यह तरीका कैसे काम करता है !! – user1621598

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