0

Java 6の時は問題なく動いていたのですが、Java 7に切り替えてからエラーが出ました。同じ画像ファイルでテストしているので、画像フォーマットの問題ではないのかもしれません。

コードの一部: (エラーは ImageIO.write 行で発生します)

try {
        ImageIO.write(bimage, format, bstream);
        bstream.close();
        return bstream.toByteArray();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

エラー:

java.util.ServiceConfigurationError: javax.imageio.spi.ImageReaderSpi: Provider com.slb.imageio.plugins.wsq.writer.WSQImageWriterSpi not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:231)
at java.util.ServiceLoader.access$300(ServiceLoader.java:181)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:369)
at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
at javax.imageio.spi.IIORegistry$1.run(IIORegistry.java:241)
at java.security.AccessController.doPrivileged(Native Method)
at javax.imageio.spi.IIORegistry.registerInstalledProviders(IIORegistry.java:249)
at javax.imageio.spi.IIORegistry.registerStandardSpis(IIORegistry.java:184)
at javax.imageio.spi.IIORegistry.<init>(IIORegistry.java:137)
at javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:159)
at javax.imageio.ImageIO.<clinit>(ImageIO.java:65)

ImageIO.write() だけでなく、次のような他の ImageIO メソッドも機能しません。

JPEGImageWriter imageWriter = (JPEGImageWriter)ImageIO.getImageWritersBySuffix("jpeg").next();
        ImageOutputStream ios = ImageIO.createImageOutputStream(out);

同様のエラーを検索してみましたが、解決策が見つかりませんでした。誰でもこれで私を助けることができますか?ありがとう

4

1 に答える 1

2

この例外は、インストールした ImageIO プラグインが原因です。

問題は、プロバイダー クラスcom.slb.imageio.plugins.wsq.writer.WSQImageWriterSpiが呼び出されるリソース/META-INF/services/javax.imageio.spi.ImageReaderSpi(通常は JAR 内) に登録されていることです。これは正しくありません。

にあるはずです/META-INF/services/javax.imageio.spi.ImageWriterSpi

スタック トレースからわかるように、例外はImageIOクラスの初期化で発生します ( <clinit>)。ImageIOこれは重要であり、これが発生した後にほとんど/すべてのメソッドが失敗する理由です。Java 6 の実装はおそらく寛容であり、プロバイダーを「ImageWriterSpi関係なく」として登録した (または単に無視した) のに対し、Java 7 の実装はより厳密です。エラーは常にそこにあり、今まではマニフェストしていませんでした。

この問題を解決するには、ベンダーに連絡して修正を依頼するか、JAR ファイルを更新して正しいファイルを に配置して/META-INF/services/ください。失敗したプラグインが必要ない場合は、もちろん、プラグインを含む JAR をクラスパスから削除できます。

于 2013-10-02T07:18:01.897 に答える