سؤال

أنا أستخدم هذا الرمز لدمج الصور باستخدام 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;
    }
}

وشاهد ما يحدث بالفعل - إلا إذا كانت لديك هذه المعلومات بالفعل حدث بسبب جملة من أثر الاستثناء.

ملاحظة: تحدث أخطاء أحيانًا عند تهيئة فئة ما على مؤشر ترابط خاطئ (على سبيل المثال، في الإصدارات المبكرة من Android، تطلبت فئة AsyncTask تهيئة صريحة على مؤشر الترابط الرئيسي في تطبيق قد يقوم بتحميل هذه الفئة على مؤشر ترابط عامل).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top