java.util.ServiceConfigurationError: не удалось создать экземпляр поставщика

У меня есть файл изображения .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

person TiyebM    schedule 23.08.2016    source источник
comment
Вы пробовали это - stackoverflow.com/a/356650/3398732?   -  person CodeWalker    schedule 23.08.2016
comment
Я не получил никакой ошибки, ваш код идеально создал файл jpg. Не могли бы вы проверить свои конфигурации?   -  person erolkaya84    schedule 23.08.2016
comment
Перекодирование изображений @CodeWalker не работает, та же ошибка, спасибо, это, безусловно, проблема конфигураций.   -  person TiyebM    schedule 23.08.2016


Ответы (2)


Судя по всему, произошел конфликт, я использовал классы из разных библиотек, здесь у меня были и jai_imageio, и jai-imageio-jpeg2000, я решил эту проблему, просто удалив один из них.

person TiyebM    schedule 01.12.2018

Я запускаю этот код, и он создает новый файл 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");
        }

    }
}
person erolkaya84    schedule 23.08.2016
comment
Я все еще получаю ту же ошибку, и не создается файл jpg, вы думаете, что есть конфликт в импорте? - person TiyebM; 23.08.2016
comment
@TiyebBellal Я обновил свой ответ. Я надеюсь, что это сработает для вас. - person erolkaya84; 23.08.2016
comment
Я попытался использовать ваш метод и после отладки обнаружил, что в этой инструкции возникает исключение: BufferedImage background = ImageIO.read(foundFile); - person TiyebM; 23.08.2016
comment
@TiyebBellal, если у вас есть файл в указанном месте, он должен найти файл. - person erolkaya84; 23.08.2016
comment
У меня есть файл jp2, а не jpg, но, как говорит ошибка: J2KImageWriterSpi не может быть создан, я думаю, что это связано с библиотекой или ограничениями доступа к ней. - person TiyebM; 23.08.2016
comment
Спасибо за усилия, наконец-то я удалил библиотеку jai-imageio-jpeg2000, и это сработало! - person TiyebM; 23.08.2016