【问题标题】:java.util.ServiceConfigurationError: Provider could not be instantiatedjava.util.ServiceConfigurationError:无法实例化提供程序
【发布时间】:2018-12-01 20:59:50
【问题描述】:

我有一个.jp2 图像文件,我想将其转换为.jpg

    BufferedImage background = ImageIO.read(new File("images\\"
    + randNum + ".jp2"));
    ImageIO.write(background, "jpg", new File("images\\" + randNum
                + ".jpg"));

我遇到了这个异常:

java.util.ServiceConfigurationError: javax.imageio.spi.ImageWriterSpi:  Provider com.github.jaiimageio.jpeg2000.impl.J2KImageWriterSpi could not be instantiated
 ...
Caused by: java.lang.NoClassDefFoundError: com/github/jaiimageio/impl/common/PackageUtil
 ...
Caused by: java.lang.ClassNotFoundException: com.github.jaiimageio.impl.common.PackageUtil

【问题讨论】:

  • 你试过这个 - stackoverflow.com/a/356650/3398732 吗?
  • 我没有收到任何错误,您的代码完美地创建了一个 jpg 文件。你能检查一下你的配置吗?
  • @CodeWalker 图片转码不工作,同样的错误,谢谢,肯定是配置问题。

标签: java javax.imageio jai


【解决方案1】:

显然,发生了冲突,我正在使用来自不同库的类,这里我有 jai_imageiojai-imageio-jpeg2000,我通过简单地删除其中一个解决了这个问题。

【讨论】:

    【解决方案2】:

    我运行这段代码,它创建了一个新的 jpg 文件。我希望它会帮助你。

    package yourPackage;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    
    public class ImageConverter {
    
    
        public static void main(String[] args) throws IOException {
            int randNum = 1;
            convertImage(randNum);      
    
        }
    
        private static void convertImage(int randNum) throws IOException {
            try {
                File foundFile = new File("c:\\images\\" + randNum + ".jp2");   
                BufferedImage background = ImageIO.read(foundFile);
                ImageIO.write(background, "jpg", new File("c:\\images\\" + randNum + ".jpg"));
                System.out.println("jpg file is generated");
            } catch (Exception e) {
                // TODO: handle exception
                System.out.println("No file " + randNum +".jp2 found");
            }
    
        }
    }
    

    【讨论】:

    • 我仍然收到同样的错误,并且没有创建 jpg 文件,你认为导入有冲突吗?
    • @TiyebBellal 我已经更新了我的答案。我希望这对你有用。
    • 我试过用你的方法,调试后发现这条指令出现异常:BufferedImage background = ImageIO.read(foundFile);
    • @TiyebBellal 如果您在该指定位置有文件,那么它应该会找到该文件。
    • 我确实有 jp2 文件而不是 jpg,但正如错误所说:J2KImageWriterSpi 无法实例化,我认为这是关于库或对它的访问限制
    猜你喜欢
    • 2020-01-17
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    相关资源
    最近更新 更多