安卓JavaCV困境:在创建IplImage时,方法“draw”内抛出NoClassDefFoundError异常。

5

我正在使用JavaCV库与预构建的OpenCV库在Android上进行开发。 我认为我已经正确地设置了Eclipse,因为我已经包含了javacv.jar和javacpp.jar两个JAR包。此外,还将java-cv-android-arm.jar添加到我的项目中。一切都编译得很好,没有错误,警告,任何可疑的事情可能会在运行时出现问题。但是,在下面的代码方法体中抛出NoClassDefFOundError异常:

@Override
    public void draw(Canvas canvas)
    {
    try
    {
        canvas.drawColor(Color.BLUE);
        if (current != null)
        {
        int width = current.getWidth();
        int height = current.getHeight();
        IplImage i = IplImage.create(width, height, IPL_DEPTH_8U, 1); // I assume here is where the exception gets thrown
        ByteBuffer buffer = i.getByteBuffer();
        current.copyPixelsToBuffer(buffer);
        // We need a grayscale image in order to do the recognition, so
        // we
        // create a new image of the same size as the original one.
        IplImage grayImage = IplImage.create(i.width(), i.height(),
            IPL_DEPTH_8U, 1);
        // We convert the original image to grayscale.
        cvCvtColor(i, grayImage, CV_BGR2GRAY);
        CvMemStorage storage = CvMemStorage.create();
        // We instantiate a classifier cascade to be used for detection,
        // using the cascade definition.
        CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(
            cvLoad("haarcascade_frontalface_alt.xml"));
        // We detect the faces.
        CvSeq faces = cvHaarDetectObjects(grayImage, cascade, storage,
            1.1, 1, 0);
        // We iterate over the discovered faces and draw yellow
        // rectangles around them.
        for (int index = 0; index < faces.total(); index++)
        {
            CvRect r = new CvRect(cvGetSeqElem(faces, index));
            cvRectangle(i, cvPoint(r.x(), r.y()),
                cvPoint(r.x() + r.width(), r.y() + r.height()),
                opencv_core.CvScalar.YELLOW, 1, CV_AA, 0);
        }
        Bitmap b = BitmapFactory.decodeByteArray(i.getByteBuffer()
            .array(), 0, i.getByteBuffer().array().length);
        canvas.drawBitmap(b, x, y, paint);
        canvas.drawText(new Date().toLocaleString(), canvas.getWidth() - 100,
            canvas.getHeight() - 50, paint);
        paint.setColor(Color.GREEN);
        }
    } catch (Exception e)
    {
        canvas.drawColor(Color.RED);

        canvas.drawText(
            "Handled exception occurred in panel:\n" + e.getMessage(),
            250, 250, paint);
        paint.setColor(Color.GREEN);
    }
    super.draw(canvas);
    }

当然,在异常抛出后,我的Android崩溃了,并强制关闭应用程序。我是否正确包含了jar和所需的库?有什么我需要注意的吗?任何帮助都将不胜感激。

下面是LogCat,供那些喜欢猫咪的人(在此插入表情符号):

05-03 19:07:53.217: E/AndroidRuntime(741): FATAL EXCEPTION: main
05-03 19:07:53.217: E/AndroidRuntime(741): java.lang.NoClassDefFoundError: com.googlecode.javacv.cpp.opencv_core$IplImage
05-03 19:07:53.217: E/AndroidRuntime(741):  at home.security.DrawingPanel.draw(DrawingPanel.java:81)
05-03 19:07:53.217: E/AndroidRuntime(741):  at home.security.Main$2.run(Main.java:105)
05-03 19:07:53.217: E/AndroidRuntime(741):  at android.os.Handler.handleCallback(Handler.java:587)
05-03 19:07:53.217: E/AndroidRuntime(741):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-03 19:07:53.217: E/AndroidRuntime(741):  at android.os.Looper.loop(Looper.java:123)
05-03 19:07:53.217: E/AndroidRuntime(741):  at android.app.ActivityThread.main(ActivityThread.java:3683)
05-03 19:07:53.217: E/AndroidRuntime(741):  at java.lang.reflect.Method.invokeNative(Native Method)
05-03 19:07:53.217: E/AndroidRuntime(741):  at java.lang.reflect.Method.invoke(Method.java:507)
05-03 19:07:53.217: E/AndroidRuntime(741):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-03 19:07:53.217: E/AndroidRuntime(741):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-03 19:07:53.217: E/AndroidRuntime(741):  at dalvik.system.NativeStart.main(Native Method)

'libs'文件夹的文件结构

enter image description here


我有完全相同的问题,但我无法解决它。 - A23149577
1个回答

5

这些JAR包需要放在项目根目录/libs文件夹中,或者将它们标记为项目构建路径中的导出项...

这样做后应该就能正常工作了...


我想我可能已经做过了。但是我不确定。您能否编辑您的答案,以向我展示如何完成此操作的步骤。我正在使用Eclipse,但我对Eclipse还很陌生。 - Daniel Lopez
谢谢,我意识到我已经添加了这些jar包但是忘记导出它们了。 - Daniel Lopez
我有完全相同的问题,但是即使我在项目的libs文件夹中添加了jar文件并将它们添加到项目属性的java构建路径中,我仍然无法解决它。有什么线索吗? - A23149577
顺便问一下,你说的导出JAR是什么意思? - A23149577

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接