7

クラスパス引数として 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/servicesjai_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 ファイル内に存在しますが。

誰かがこのエラーが発生する理由と、それを解決するために何をすべきかを説明してもらえますか.

4

1 に答える 1