2011-03-30 15 views
6

पर छवियां जोड़ें मैं अपने जेएफआरएम में आइकन सेट करना चाहता हूं। मैं निम्न कार्य करें:जार

Image icon = Toolkit.getDefaultToolkit().getImage("src/images/icon.jpg"); 
this.setIconImage(icon); 

यह ठीक काम करता है जब मैं NetBeans से इस कोड को चलाने के लिए, लेकिन जब मैं जार फ़ाइल से इस कोड को चलाने का प्रयास, छवियों मेरी JFrame में नहीं दिखाया जाता। मैं संसाधनों के रूप में छवियों को लोड करने की कोशिश की:

this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/src/images/icon.jpg"))); 

लेकिन यह NullPointerException

Uncaught error fetching image: 
java.lang.NullPointerException 
     at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99) 
     at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:113) 
     at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240) 
     at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172) 
     at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) 

के साथ विफल हो मैं इस काम कैसे कर सकते जब मैं इस कोड को चलाने के?

संपादित करें: सभी को धन्यवाद, समस्या

Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/icon.JPG")) 

के लिए यह नहीं बल्कि अजीब लगता है के रूप में के रूप में निर्दिष्ट छवि से हल किया गया था, और बेहतर होगा अगर यह

this.setIconImage(new ImageIcon(pathToIcon).getImage()); 
+0

अर्थात JAR फ़ाइल में वास्तव में जहां छवि रख दिया गया है अपने JAR फ़ाइल की संरचना क्या है? –

उत्तर

3

URLImageSource के स्रोत कोड को देखते हुए, ऐसा लगता है कि getConnection एनपीई फेंकता है कि यूआरएल के लिए null है।और वह मुझे संदेह है कि

getClass().getResource("/src/images/icon.jpg") 

null लौटा रहा है ओर जाता है। ऐसा होगा कि अगर वह उस पथनाम के साथ संसाधन का पता नहीं लगा सका।

मुझे यकीन है कि समस्या यह है कि आपको पथ गलत है।

इसे साबित/अस्वीकार करने के लिए, आपको JAR फ़ाइल पर jar tvf चलाएं, और "icon.jpg" से मेल खाने वाली रेखा की तलाश करें। क्या संबंधित पथनाम उतना ही है जितना आप उपयोग कर रहे हैं? यदि नहीं, तो getResource कॉल में मिलान रेखा से पथनाम का उपयोग करें और इसे काम करना चाहिए। वैकल्पिक रूप से, अगर फ़ाइल बिल्कुल दिखाई नहीं दे रही है, तो NetBeans बिल्ड कॉन्फ़िगरेशन को देखें जो बताते हैं कि JAR फ़ाइल में क्या रखा जाए। (मैं एक NetBeans उपयोगकर्ता नहीं हूँ, इसलिए मैं यह नहीं कह सकते हैं जहाँ आप देखने की जरूरत है कि ...)


है कि आप की ओर जाता है बिल्कुल कहीं नहीं हैं, तो एक और संभावना है कि getClass().getResource(...) एक classloader कि नहीं करता है उपयोग कर रहा है छवि युक्त जार फ़ाइल के बारे में नहीं पता। (यह मेरे लिए बहुत असंभव प्रतीत होता है ...)

+1

jar tvf दिखाता है कि icon.jpg छवियों/icon.jpg में स्थित है, लेकिन न तो getClass()। GetResource ("/ images/icon.jpg") और न ही getClass()। GetResource ("images/icon.jpg") नहीं करता है काम नहीं करता लेकिन getClass()। GetClassLoader()। GetResource ("images/icon.jpg") ठीक काम करता है। – maks

+0

मुझे एक ही समस्या है, लेकिन मैं इसे मुख्य विधि के अंदर कर रहा हूं, इसलिए "getClass()" काम नहीं करता है। इसके बदले मुझे क्या रखना चाहिए? मैंने मुख्य वर्ग का एक नया उदाहरण बनाने की कोशिश की, लेकिन जब मैंने कोशिश की तो मुझे एक अपवाद दिया। – Ephraim

+1

'YourMainClass.class.getClassLoader() प्राप्त करें। GetResource (resourePath) '। –

0
की तरह था

यह मान लेना चाहिए कि आप javax.imageio.ImageIO आयात कर सकते हैं:

Image icon = ImageIO.read(this.getClass().getResource("/src/images/icon.jpg")); 
this.setIconImage(icon); 
+0

यह निर्दिष्ट स्थान में ऐसी फ़ाइल नहीं पा रहा है, लेकिन यह – maks

+0

हम्म है ... क्या आप छवि फ़ाइल को बाहर फ़ोल्डर में ले जाने का प्रयास कर सकते हैं, लेकिन उसी निर्देशिका में src निर्देशिका के रूप में। पसंद है: "/resources/images/icon.jpg"? – jberg

2

getResource() क्लासपाथ से संसाधन लोड करता है, ओएस पथ नहीं, और बाद में संकलन के बाद आपके क्लासपाथ में /src फ़ोल्डर शामिल नहीं होगा, बल्कि इसकी सामग्री भी शामिल होगी। तो आप /images/icon.jpg बेहतर प्रयास करेंगे।

इसके अलावा आप this discussion कुछ हद तक उपयोगी पा सकते हैं।

0
.."/src/images/icon.jpg".. 

पते का 'src' उपसर्ग संदिग्ध प्रतीत होता है। कई एप्स अलग-अलग 'src' और 'build' निर्देशिका प्रदान करेगा, लेकिन यह सामान्य रूप से समाप्त होता है कि परिणामी जार में 'src' उपसर्ग का उपयोग नहीं किया जाता है। मैं प्रयास करने की अनुशंसा ..

.."/images/icon.jpg".. 

& भी ट्रिपल जाँच उस छवि जार कि कोड यह खोजने के लिए उम्मीद कर रही है के स्थान में है।

3

अपने JAR फ़ाइल मानते हुए, एक शीर्ष स्तर की निर्देशिका images कहा जाता है कि आप या तो उपयोग कर सकते हैं: आप से छवियों का उपयोग करना चाहिए

  1. getClass().getResource("/images/icon.jpg") या
  2. getClass().getClassLoader().getResource("images/icon.jpg")
0

इसके लिए काम करने के लिए, कुछ निश्चित वर्ग के सापेक्ष एक निर्देशिका। उदाहरण के लिए, छवि फ़ाइलों की निर्देशिका "छवियों" में, Toolkit.class रूप में एक ही स्तर पर सहेजे जाते हैं तो

this.setIconImage(Toolkit.getDefaultToolkit().getImage(Toolkit.class.getResource("images/icon.jpg"))); काम करना चाहिए।

0

इस पोस्ट में समाधान here में समझाया गया है। बस एक नजर डालें!

चीयर्स

0

आप बस मुख्य स्रोत के अंदर एक पैकेज बना सकते हैं और इस पैकेज में अपनी छवियों को incluse। तो फिर, जैसे आपका मुख्य वर्ग में छवियों फोन:

ImageIcon a = new ImageIcon(MainClass.class.getResource("/Package/Image.jpg"));

0
JFrame f = new JFrame("Edit Configure File"); 
//Image image = ImageIO.read(getClass().getResource("images/ctx.Icon")); 
f.setIconImage(new ImageIcon("images/ctx.PNG").getImage());//this works for me finally 
//f.setIconImage(image); 
//f.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/ctx.PNG")));