2012-01-10 22 views
6

मैं एक समारोह है:जावा विशेष यूआरएल पात्रों

public static ImageIcon GetIconImageFromResource(String path){ 
    URL url = ARMMain.class.getResource(path); 
return new ImageIcon(url); 
} 

यह बहुत अच्छा काम करता है, लेकिन अगर मैं सी उदाहरण के लिए पर मेरी .JAR फ़ाइल: \ एरेस !!! \ myfile.jar यह विफल और मुझे अपने आइकन नहीं दिख रहे हैं। मैंने देखा है कि मेरा यूआरएल फ़ाइल है:/सी:/एरेस !!!/myfile.jar! /com/test/images/img.png। तो जेएआर एक्सटेंशन के बाद है! प्रतीक! मुझे लगता है कि यह मुख्य कारण है! इस समस्या से बचने के लिए मैं क्या कर सकता हूं? धन्यवाद।

+0

आपको स्थिर पूर्ण पथों के बजाय सापेक्ष पथ का उपयोग करना चाहिए। –

+0

यदि आपके लिए यह मुश्किल नहीं है तो आप मुझे कैसे समझा सकते हैं? मेरे पास स्टैंडअर्ट ** ARMMain.class.getResource (पथ) ** फ़ंक्शन है जो यूआरएल देता है। – Nolesh

+2

'सी:/XYZ/...' का उपयोग करने के बजाय 'images/img.png' के रूप में सापेक्ष पथ का उपयोग करें। –

उत्तर

5

यह स्पष्ट रूप से जावा की एक समस्या (एक बग से अधिक) है। JAR URL !/ का उपयोग delimiter के रूप में करता है, लेकिन जब यह फ़ाइल पथ के अंदर प्रकट होता है तो इससे बच नहीं आता है।

आप इसे अपने आप से बचने की कोशिश कर सकते हैं, Ares!!!/Ares!!%21/ में बदलें, लेकिन myfile.jar!/ पर रखें।


RFC3986 के अनुसार, ! एक आरक्षित उप सीमांकक चार है। इसलिए यूआरएल में अलग-अलग हिस्सों को अलग करने के लिए इसका इस्तेमाल सुरक्षित है; जब यह किसी भाग के अंदर दिखाई देता है, तो इसे %21

हालांकि, जावा यूआरएल से निपटने वाला जावा कोड पुराने आरएफसी 2396 का पालन करता है, जिसमें ! एक अनारक्षित चार था। जावा के लिए अनारक्षित चार को विभाजक के रूप में चुनना मूर्खतापूर्ण था। और जब ऐसा हुआ, तो कम से कम आंतरिक रूप से बच जाना चाहिए जैसे कि चार आरक्षित है।

+0

जैसा कि मैं देख सकता हूं यह सभी उपयोगकर्ताओं और प्रोग्रामर के लिए बड़ी समस्या है ... इसलिए चर्चा के लिए सभी को धन्यवाद। मैं इस धागे को बंद करने जा रहा हूँ। – Nolesh

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