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

尝试保存图像时发生异常

孙梓
2023-03-14
问题内容

启动Java应用程序时,尝试保存图像时出现异常。但是,在Eclipse中,一切正常。该应用程序是使用fatjar构建的,并且还选择了必需的库(jar_imageio.jar和ij.jar)进行导出。

我尝试使用ImageIO和ImageJ:

a。)ImageIO:

ImageIO.write(image, "jpg", new File(f));


Exception in thread "main" sun.misc.ServiceConfigurationError: 
javax.imageio.spi.ImageWriterSpi: 
Provider com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriterSpi 
could not be instantiated: java.lang.IllegalArgumentException: vendorName == null!
    at sun.misc.Service.fail(Unknown Source)
    at sun.misc.Service.access$200(Unknown Source)
    at sun.misc.Service$LazyIterator.next(Unknown Source)
    at javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(Unknown Source)
    at javax.imageio.spi.IIORegistry.<init>(Unknown Source)
    at javax.imageio.spi.IIORegistry.getDefaultInstance(Unknown Source)
    at javax.imageio.ImageIO.<clinit>(Unknown Source)

b。)ImageJ:

IJ.saveAs(image, "jpg", f);
java.lang.NoClassDefFoundError: Could not initialize class javax.imageio.ImageIO

    at ij.plugin.JpegWriter.saveAsJpeg(JpegWriter.java:49)
    at ij.plugin.JpegWriter.save(JpegWriter.java:28)
    at ij.io.FileSaver.saveAsJpeg(FileSaver.java:340)
    at ij.io.FileSaver.saveAsJpeg(FileSaver.java:332)
    at ij.plugin.filter.Writer.run(Writer.java:24)
    at ij.plugin.filter.PlugInFilterRunner.processOneImage(PlugInFilterRunner.java:256)
    at ij.plugin.filter.PlugInFilterRunner.<init>(PlugInFilterRunner.java:105)
    at ij.IJ.runPlugIn(IJ.java:158)
    at ij.Executer.runCommand(Executer.java:127)
    at ij.Executer.run(Executer.java:64)
    at ij.IJ.run(IJ.java:249)
    at ij.IJ.run(IJ.java:296)
    at ij.IJ.saveAs(IJ.java:1579)

问题答案:

正如@Victor说的,我认为您应该看看

Exception in thread "main" sun.misc.ServiceConfigurationError: 
javax.imageio.spi.ImageWriterSpi: 
Provider com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriterSpi 
could not be instantiated: java.lang.IllegalArgumentException: vendorName == null!

我昨天才遇到这个问题,这很棘手。有类似的问题在这里。我发现如果我在jar中包含了jai_imageio,并且没有修改清单文件以包含JAI清单文件的内容,或者没有在构建中将META-
INF的services文件夹中的文件合并,那么我遇到了许多与您相似的错误。我的应用程序确实可以运行,但是由于JAI是在本地安装的,所以没有包含JAI,但我暂时选择使用JAI来构建它。

打开jar,您将找到一个名为META-INF的目录。其中有文件MANIFEST.MF。我使用Maven在清单文件中包含JAI内容,因此它看起来像

Manifest-Version: 1.0
Implementation-Title: com.sun.media.imageio
Implementation-Version: 1.0_01
Built-By: myName
Specification-Vendor: Sun Microsystems, Inc.
Created-By: Apache Maven
Implementation-Vendor: Sun Microsystems, Inc.
Build-Jdk: 1.6.0_43
Specification-Title: Java Advanced Imaging Image I/O Tools
Specification-Version: 1.0-mr
Extension-Name: com.sun.media.imageio
Main-Class: myMain
Archiver-Version: Plexus Archiver

您应该在那里输入自己的名字和主要班级。如果不使用Maven(或Ant)使其工作,则可以修改此文件并在命令行上自行添加。我遇到了一个额外的问题,其中一些附带的jar覆盖了META-
INF的services文件夹中的文件。相反,我使用Maven的Shade插件合并了这些文件。



 类似资料:
  • 我有两个实体,我想保存到数据库中,付款和付款项。付款可以有更多的付款项目。 主要实体: 第二个实体: 所以,我用1个PaymentItem填充一个Payment,并尝试保存它。请注意,Payment没有自动生成的ID,我从其他地方获取ID并手动设置。 现在,当我试图保存它时,Hibernate会转到数据库,查看是否存在一个现有条目及其项(不是,数据库是空的)。 我知道这一点,因为我打开了Hiber

  • 问题内容: 我正在使用以下时间戳格式: 以下方法可以正常工作: 而且,当我使用该格式字符串传递时间戳时,它返回,例如: 然后,我需要再次从该字符串映射到时间戳,本质上是相反的操作。我知道我可以使用和及其方法,但是如果可能的话,我宁愿坚持使用样式格式。 我写了这段代码(相当hacky),它适用于某些格式,但不适用于特定格式: 在第二部分,它失败了。 堆栈跟踪: 有没有一种更简单的方法可以在不利用我的

  • 我还更新了相关的XML文件,其中提到了spring security bean。我在用Postgres数据库。而且,在我的系统中,一切都运行良好,当我将这些更改提交到QA环境时,登录不工作。我在登录到应用程序时检查了日志,它显示了一些错误。这是日志 还有,如何检查ubuntu服务器中的PostgreSQL JDBC驱动程序版本?有人能帮我解决这个问题吗?谢谢

  • 守则 @RestController的代码:

  • 我使用一个自定义的视图,在我使用画布,用户可以绘制任何东西,之后,我想保存在sd卡的图像,英国电信是不能做到这一点。不知道是怎么回事。

  • 当我试图保存我的Android游戏(通过Android模拟器在我的Windows笔记本电脑上播放),我得到一个。我花了几个小时尝试不同的东西,但仍然感到困惑,因为代码完全适用于我以前的版本,而不是Android系统。