クラスパス引数として JAR ファイルを使用して JVM をロードする C++ アプリケーションを正常に実行しています。その後、アプリケーションは JNI 呼び出しを正常に使用して、この JAR ファイル内の .class ファイルで定義されたさまざまな機能を実行します。
.jar ファイルのディレクトリ構造には、jai_imageio.jar からマージされたサードパーティ製の .class ファイルのセットが含まれています (これらの .class ファイルは、完全なディレクトリ構造とともに、Intellij IDEA を使用してこの単一の .jar ファイルにマージされました)。マージされた .jar ファイルには、元の jai_imageio.jar の行manifest.mf
、特にimplementation-title
関連する行も含まれています。また、meta-inf/services
jai_imageio.jar からコピーされたフォルダーも存在します。ディレクトリ内にリストされているさまざまなサービスはservices
正しいように見えます。
特に、 .jar ファイルjavax.imageio.spi.ImageOutputStreamSpi
内のmeta-inf/services
フォルダー内には単一の行が含まれており、.jar ファイルcom.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi
内には、その行によって示される正確なディレクトリーに、これに対応するクラスがありますcom/sun/media/imageioimpl/stream/ChannelImageOutputStreamSpi.class
。
ただし、Java コードが次の行を実行すると、次のようになります。
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 ファイル内に存在しますが。
誰かがこのエラーが発生する理由と、それを解決するために何をすべきかを説明してもらえますか.