के रूप में एक ही JAR फ़ाइल में है, मैं सफलतापूर्वक एक C++ एप्लिकेशन चला रहा हूं जो एक JAR फ़ाइल को क्लासपाथ तर्क के रूप में JVM लोड करता है। इस जेएआर फ़ाइल में .class फ़ाइलों में परिभाषित विभिन्न कार्यों को निष्पादित करने के लिए एप्लिकेशन सफलतापूर्वक जेएनआई कॉल का उपयोग करता है।सेवा लोडर सेवा प्रदाता कक्षा का पता नहीं लगाता है, भले ही कक्षा मेटा-आईएनएफ/सेवाओं
.jar फ़ाइल की निर्देशिका संरचना में शामिल है .class फ़ाइलों का एक तृतीय-पक्ष सेट है - जो jai_imageio.jar से विलय किए गए हैं (इन .class फ़ाइलों, उनकी पूर्ण निर्देशिका संरचना के साथ, इस एकल .jar फ़ाइल में विलय कर रहे थे इंटेलिज आईडीईए)। मर्ज किए गए .jar फ़ाइल में भी शामिल हैं मूल jai_imageio.jar के manifest.mf
- विशेष रूप से implementation-title
और संबंधित लाइनों से लाइनें हैं। इसके अलावा, meta-inf/services
फ़ोल्डर मौजूद है, jai_imageio.jar से भी कॉपी किया गया है। services
निर्देशिका में सूचीबद्ध विभिन्न सेवाएं सही दिखती हैं।
विशेष रूप से, javax.imageio.spi.ImageOutputStreamSpi
.jar फ़ाइल में meta-inf/services
फ़ोल्डर के भीतर एक पंक्ति com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi
शामिल है, और वहाँ एक वर्ग वास्तव में निर्देशिका कि लाइन द्वारा indicatted पर .jar फ़ाइल के भीतर इस के लिए इसी है: com/sun/media/imageioimpl/stream/ChannelImageOutputStreamSpi.class
।
हालांकि, जब जावा कोड निम्न पंक्ति निष्पादित करता है:
ImageIO.write(image, "tiff", file); // Assume 'image' is a BufferedImage and 'file' is a File
... यह एक अपवाद फेंकता है:
java.util.ServiceConfigurationError: javax.imageio.spi.ImageOutputStreamSpi:
Provider com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi not found
... भले ही इस वर्ग भीतर मौजूद है जैसा कि ऊपर बताया गया है, वही .jar फ़ाइल।
क्या कोई यह बता सकता है कि यह त्रुटि क्यों हो रही है, और इसे हल करने के लिए मुझे क्या करना चाहिए।
वही त्रुटि होता है (अर्थात सिर्फ जावा कोड से विधि सामान्य रूप से कह कर बुलाया)? – artbristol
यदि आवश्यकता हो तो मैं इसका परीक्षण करूंगा, लेकिन यह एक परेशानी होगी क्योंकि कई पिछले जेएनआई कॉल (सफलतापूर्वक) चलते हैं जो सेटअप करते हैं। ये इस अर्थ में समस्याएं पैदा नहीं कर रहे हैं कि मानक छवि प्रकार 'jpg', 'bmp' और' png' को फ़ाइल सिस्टम में सफलतापूर्वक लिखा गया है (मान लीजिए कि 'jai_imageio' .class फ़ाइलों को विलय नहीं किया गया है)। यदि आवश्यक हो, तो मैं इसे सेट अप करूँगा और जैसा कि आप सुझाव देते हैं, परीक्षण करें, हालांकि मैं इसे किए बिना इसे हल करने की उम्मीद कर रहा था। –
कोई सेटअप करने के लिए आवश्यक नहीं होना चाहिए - आप केवल 'ImageIO.write (छवि, "टिफ़", फ़ाइल) के साथ एक स्वयं निहित वर्ग बना सकते हैं; इसमें, और उस श्रेणी को चलाने की कोशिश करें, अपने जार में कक्षापाथ – artbristol