当前位置: 首页 > 面试题库 >

JAI供应商名称== null

匡祖鹤
2023-03-14
问题内容

因此,我完成了对应用程序进行编码以旋转TIFF图像的过程,这需要JAI操纵TIFF。

当在Eclipse下工作时,它工作正常,但是当我执行java -jar
Push时,每当我为该库构建一个胖jar然后创建一个实现该胖jar的时候(根据http://fjep.sourceforge.net/fjeptutorial.html),它就可以正常工作。
jar \ path \ to \ dir,它运行直到碰到要压缩和保存的部分:

TIFFImageWriterSpi tiffspi = new TIFFImageWriterSpi();
ImageWriter writer = tiffspi.createWriterInstance();
//Iterator<ImageWriter> iter =  ImageIO.getImageWritersByFormatName("TIFF");
//ImageWriter writer = iter.next();

ImageWriteParam param2 = writer.getDefaultWriteParam();
param2.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

param2.setCompressionType("LZW");
param2.setCompressionQuality(0.0f);
File fOutputFile = workArea[i];
ImageOutputStream ios = ImageIO.createImageOutputStream(fOutputFile);
writer.setOutput(ios);

if (frontPage == 1)
{
     writer.write(null, new IIOImage(pg1, null, null), param2);
     writer.writeInsert(-1, new IIOImage(pg2, null, null), param2);
}
else if (frontPage == 2)
{
     writer.write(null, new IIOImage(pg2, null, null), param2);
     writer.writeInsert(-1, new IIOImage(pg1, null, null), param2);
}

remaining = remaining - 1;
    if (remaining > 0)
     System.out.println(remaining + " remaining.");
else
     System.out.println("Done.");

它在该部分的第一行显示以下消息:

 Exception in thread "main" java.lang.IllegalArgumentException: vendorName == null!
 ....rest of stack trace.

问题答案:

由于我花了大量时间调试此问题,所以我认为尽管存在这个问题,我仍将在这里分享我的解决方案。Srikanth的第二个链接特别有用。

错误原因

JAI的一些深层内部结构要求供应商名称,尤其是javax.imageio.spi.IIOServiceProvider,许多(全部?)图像读取器都将其用作底层IO。字符串是什么并不挑剔,但不能为null。

ImageReaderSpi类不是对供应商名称进行硬编码,而是从sun.media.imageioimpl.common.PackageUtil.getVendor()获取供应商名称。这反过来
从jar的MANIFEST.MF中读取它 。通常,您链接到标准的jai-
imageio包装,因此会读取Sun的供应商信息。但是,由于要创建一个胖jar文件,因此您用自己的Sun的MANIFEST.MF替换了缺少所需信息的文件。

在MANIFEST.MF文件中包括以下几行:

规范标题:Java Advanced Imaging Image I / O工具
规格版本:1.1
规范供应商:Sun Microsystems,Inc.
实施标题:com.sun.media.imageio
实施版本:1.1
实施厂商:Sun Microsystems,Inc.

每个属性的值可以是任何值(我使用了我的特定应用程序/版本/公司),只要定义了全部六个即可。

马文

如果您使用的是maven的程序集插件来创建胖罐,则maven可以自动包含正确的版本号等。pom.xml使用以下<archive>部分更新您的内容:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
            <manifestEntries>
                <Specification-Vendor>MyCompany</Specification-Vendor>
                <Implementation-Vendor>MyCompany</Implementation-Vendor>
            </manifestEntries>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>create-my-bundle</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>


 类似资料:
  • Oracle 的 Java SE 的 JSSE 实现是包含了一个名为 SunJSSE 的供应商,通过 JCA 来预装和预注册。这个供应商提供以下加密服务: SSL 3.0 和 TLS 1.0 安全协议的实现 最常见 SSL 和 TLS 密码套件的实现,其中包括认证、密钥协议、加密和完整性保护 一个基于 x.509 的密钥管理器的实现,用于从标准的 JCA keystore 中选择合适的认证密钥 一

  • 本文向大家介绍C#运营商名称,包括了C#运营商名称的使用技巧和注意事项,需要的朋友参考一下 示例 返回表示的不合格名称的字符串variable,type或member。 nameof在C#6.0中引入了该运算符。它在编译时求值,并且返回的字符串值由编译器内联插入,因此可以在大多数可以使用常量字符串的情况下使用它(例如,语句中的case标签switch,属性等)。 。在引发和记录异常,属性,MVC

  • 我正在寻找使用我的应用程序在我的设备上安装的不同应用程序的第一次安装时间。非常基本的PackageManager-

  • 查询供应商列表 接口描述 获取所有供应商列表 URL /provider HTTP Method GET 请求参数 无 返回参数 返回参数 是否必须 类型 描述 providerId true String 供应商编号 providerName true String 供应商名称 HTTP请求示例 GET /provider HTTP/1.1 Host: api.miot.10046

  • 问题内容: 我已经找到了尽可能多的文档和StackOverflow文章,但是使用Go 1.6中的新供应商功能无法导入。 这是我与Goji一起测试的示例项目。目录结构如下: 并且,项目中的唯一文件是这样的: 我的环境变量如下: 我尝试了最简单的构建命令,但是没有运气: 我也尝试用: …无济于事。我完全想念什么吗?任何建议表示赞赏。 问题答案: 我建议您阅读https://golang.org/doc