ExceptionInInitializerError в Stitcher с JavaCV для Android

Я использую этот код для сшивания изображений с JavaCV на Android:

public void ImageStitching() {
    Stitcher stitcher = Stitcher.createDefault(false);
    MatVector images = new MatVector(2);
    images.put(0,cvLoadImage("sample1.png"));
    images.put(1,cvLoadImage("sample2.png"));

    IplImage result = new IplImage(null);
    int status = stitcher.stitch(images,result);

    if( status == Stitcher.OK )
    {
        cvSaveImage("result.png", result);
    }
}

Но когда я его выполняю, приложение вылетает и в журнале появляется следующая ошибка:

java.lang.ExceptionInInitializerError at ...

и ошибка указывает на инициализацию Stitcher, первую строку моего кода. Если я попытаюсь сделать Stitcher stitcher; это не ломается, но я больше ничего не могу сделать, так как брошюровщик не инициализирован. Если я попытаюсь инициализировать его null он вылетает с той же ошибкой.

Есть идеи о проблеме? Я искал некоторое время, и все люди используют это, и это, кажется, работает.

2 ответа

Решение

Ладно, я понял.

Проблема была в том, что библиотека opencv_stitching.so была только в папке armeabi, а мне нужна была в armeabi-v7a. Не могу объявить брошюровщик и инициализировать его.

ExceptionInInitializerError

Сигналы о том, что в статическом инициализаторе произошло непредвиденное исключение. ExceptionInInitializerError генерируется, чтобы указать, что исключение произошло во время оценки статического инициализатора или инициализатора для статической переменной.

Я бы сделал что-то вроде

Stitcher stitcher;
{
    try {
        stitcher = Stitcher.createDefault(false);
    } catch (Throwable t) {
        t.printStackTrace();
        throw t;
    }
}

и посмотрите, что на самом деле происходит - если только вы уже не располагаете этой информацией в пункте " вызвано оператором" трассировки исключений.

PS иногда возникают ошибки, когда класс инициализируется не в том потоке (например, в ранних версиях Android класс AsyncTask требовал явной инициализации основного потока в приложении, которое в противном случае загружало бы этот класс в рабочий поток).

Другие вопросы по тегам