代码之家  ›  专栏  ›  技术社区  ›  Al-un

TwelveMonkeys:读取JPEG时未找到ProgressListenerBase类

  •  0
  • Al-un  · 技术社区  · 6 年前

    错误描述

    上传图片时,我们的项目需要做一些上传后处理。但是,在上载JPEG文件后运行代码

    BufferedImage bImg = ImageIO.read(file);
    

    触发异常:

    Caused by: java.lang.NoClassDefFoundError: com/twelvemonkeys/imageio/util/ProgressListenerBase
        at com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReaderSpi.createReaderInstance(JPEGImageReaderSpi.java:126)
        at javax.imageio.spi.ImageReaderSpi.createReaderInstance(ImageReaderSpi.java:320)
        at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:529)
        at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:513)
        at javax.imageio.ImageIO.read(ImageIO.java:1443)
        at javax.imageio.ImageIO.read(ImageIO.java:1308)
    

    上传PNG文件时一切正常。

    项目配置

    我们的JavaEE7项目最初需要12个像素来处理CMYK编码的JPG图像。耳朵由以下部分组成:

    • 项目休息(战争)=>依赖于项目公共和项目ejb

    project-common 有十二种依赖关系:

    <!-- Image IO -->
    <dependency>
        <groupId>com.twelvemonkeys.imageio</groupId>
        <artifactId>imageio-jpeg</artifactId>
        <version>3.3.2</version>
    </dependency>
    <dependency>
        <groupId>com.twelvemonkeys.imageio</groupId>
        <artifactId>imageio-bmp</artifactId>
        <version>3.3.2</version>
    </dependency>
    <dependency>
        <groupId>com.twelvemonkeys.servlet</groupId>
        <artifactId>servlet</artifactId>
        <version>3.3.2</version>
    </dependency>
    

    通过传递性转发给其他组件。我们只处理 .jp(e)g .png . 我们也使用 Thumbnailator 还有十二只猴子。

    故障排除

    1. documentation this SO question ,我在中添加了侦听器 project-web :

      <listener>
          <display-name>ImageIO service provider loader/unloader</display-name>
          <listener-class>com.twelvemonkeys.servlet.image.IIOProviderContextListener</listener-class>
      </listener>
      

      在Netbeans下 com/twelvemonkeys/imageio/util/ProgressListenerBase project-ejb 项目网站

    2. 不管 ImageIO.read(file) 被召入 ejb项目 项目网站 ,错误相同

    3. ImageIO.scanForPlugins() 之前 ImageIO.read(文件) ,错误相同

    变通办法

    跟随

    我已手动放置依赖项

    # common dependencies:
    > common-image-3.3.2.jar
    > common-io-3.3.2.jar
    > common-lang-3.3.2.jar
    # shared dependencies:
    > imageio-core-3.3.2.jar
    > imageio-metadata-3.3.2.jar
    # TwelveMonkeys dependencies:
    > imageio-jpeg-3.3.2.jar
    > imageio-bmp-3.3.2.jar
    # Servlet
    > servlet-3.3.2.jar
    

    在里面 {PAYARA_DIR}\glassfish\domains\{DOMAIN_NAME}\lib 文件夹 没有 删除侦听器。我把依赖范围改为 <scope>provided</scope>

    问题

    0 回复  |  直到 6 年前