ExceptionInInitializerError dans Stitcher avec JavaCV pour Android


J'utilise ce code pour l'assemblage d'images avec JavaCV sur 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);
    }
}

, Mais quand je l'exécuter, l'application se bloque et le journal affiche l'erreur suivante:

java.lang.ExceptionInInitializerError at ...

Et l'erreur pointe vers l'initialisation de Stitcher, la première ligne de mon code. Si j'essaie de faire Stitcher stitcher;, il ne se casse pas, mais je ne peux rien faire d'autre car le stitcher n'est pas initialisé. Si j'essaie de l'initialiser à null, il se bloque avec la même erreur.

Une idée du problème? J'ai été chercher pendant un moment et toutes les personnes utilisent cela et cela semble fonctionner.

Author: serfe, 2013-11-18

2 answers

ExceptionInInitializerError

les Signaux qu'une exception inattendue s'est produite dans un initialiseur statique. Un ExceptionInInitializerError est levée pour indiquer qu'une exception s'est produite lors de l'évaluation d'un initialiseur statique ou l'initialiseur, pour une variable statique.

Je ferais quelque chose comme

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

Et voyez ce qui se passe vraiment unless sauf si vous avez déjà cette information dans la causée par la clause de la trace d'exception.

PS parfois, des erreurs se produisent lorsqu'une classe est initialisée sur le mauvais thread (par exemple, dans les premières versions d'Android, la classe AsyncTask nécessitait une initialisation explicite sur le thread principal dans une application qui autrement chargerait cette classe sur un thread de travail).

 0
Author: 18446744073709551615, 2013-11-18 10:35:46

Ok, j'ai compris.

Le problème était que la bibliothèque opencv_stitching.so était seulement dans le dossier armeabi et j'avais besoin dans l'armeabi-v7a. Je ne peux pas déclarer le stitcher et l'initialiser.

 0
Author: serfe, 2013-11-18 12:40:58