Question

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 lorsque je l'exécute, l'application plante 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'essaye de faire Stitcher stitcher; ça ne casse pas, mais je ne peux rien faire d'autre puisque le stitcher n'est pas initialisé.Si j'essaie de l'initialiser à null il plante avec la même erreur.

Une idée du problème ?Je cherche depuis un moment et tout le monde l'utilise et cela semble fonctionner.

Était-ce utile?

La solution 2

OK j'ai compris.

Le problème était que la bibliothèque opencv_stitching.so se trouvait uniquement dans le dossier armeabi et dont j'avais besoin dans celui armeabi-v7a.Non, je peux déclarer le stitcher et l'initialiser.

Autres conseils

ExceptionInInitializerError

Signale qu'une exception inattendue s'est produite dans un initialiseur statique.Une ExceptionInInitializerError est levée pour indiquer qu'une exception s'est produite lors de l'évaluation d'un initialiseur statique ou de l'initialiseur d'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 réellement - à moins que vous n'ayez déjà cette information dans le causé par 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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top