gpt4 book ai didi

java - JAI供应商名称== null(标准解决方案不起作用)

转载 作者:行者123 更新时间:2023-12-02 13:55:00 29 4
gpt4 key购买 nike

使用ImageIO时,我得到这个java.util.ServiceConfigurationError:

javax.imageio.spi.ImageInputStreamSpi: Provider com.sun.media.imageioimpl.stream.ChannelImageInputStreamSpi could not be instantiated caused by: java.lang.IllegalArgumentException: vendorName == null!.

我试过this解决我的问题,但没有帮助。我的 jai_imageio.jar 中的 MANIFEST.MF 包含所有必需的信息:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.4.2_12-b03 (Sun Microsystems Inc.)
Specification-Title: Java Advanced Imaging Image I/O ToolsSun Microsystems, Inc.
Implementation-Title: com.sun.media.imageio
Implementation-Version: 1.1
Specification-Version: 1.1
Implementation-Vendor: Sun Microsystems, Inc.
Extension-Name: com.sun.media.imageio
Sealed: true

重要 - 仅当我在没有 Eclipse 的情况下将程序作为导出的可运行 jar 文件运行时,才会发生此错误。当我使用 Eclipse 运行时,一切正常。

最佳答案

我知道它很旧,并且已经被问过很多次了,但是我遇到了同样的问题,而且标准解决方案也不适合我,所以我选择了这个来分享我的解决方案。我的 list 中包含所有属性(包括 OP 代码片段中缺少的 Specification-Vendor),但 AWS EMR 集群上的 Hadoop RunJar 类似乎解压了 jar,因此 list 被忽略(我并没有真正更深入地调查这一点)。我最终得到了使用反射的解决方案:

public static void tweakPackageUtil (Class<?> packageUtilClass, String vendor, String version, String specTitle) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
{
Field vendorField = packageUtilClass.getDeclaredField("vendor");
vendorField.setAccessible(true);
vendorField.set(null, vendor);

Field versionField = packageUtilClass.getDeclaredField("version");
versionField.setAccessible(true);
versionField.set(null, version);

Field specTitleField = packageUtilClass.getDeclaredField("specTitle");
specTitleField.setAccessible(true);
specTitleField.set(null, specTitle);
}

并为所有 PackageUtil 类调用此方法 - 在我的例子中:

com.sun.media.imageioimpl.common.PackageUtil.class,
io.scif.media.imageioimpl.common.PackageUtil.class,
com.github.jaiimageio.impl.common.PackageUtil.class

使用 vendorversionspecType 的确切值并不重要,只要它们不是

关于java - JAI供应商名称== null(标准解决方案不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146258/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com