2012-05-03 52 views
5

我正在使用JavaCV庫和預構建的Android OpenCV庫。我認爲我已經正確設置了Eclipse,因爲我已經包含了javacv.jar和javacpp.jar這兩個jar。此外,我的項目中的java-cv-android-arm.jar。一切都編譯好,沒有錯誤,警告,任何應該懷疑在運行時會出錯的東西。但我得到了在下面這個方法體拋出NoClassDefFoundError的例外:拋出異常,當然,之後當創建IplImage時,Android JavaCV困境,方法'draw'內拋出的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崩潰了,我強行關閉應用程序。我是否包含了罐子,並且正確地要求了庫?有什麼我應該知道的?任何幫助將不勝感激。

這裏是爲那些誰喜歡貓的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

+0

我有相同的問題,但我解決不了它 – A23149577

回答

5

的罐子必須在project-root/libs文件夾中或將其標記爲在項目的構建路徑中導出CT ......

現在它應該工作...

+0

我想我可能已經做到了。但後來我不確定。你可以編輯你的答案,告訴我爲了做到這一點的步驟。我使用的是日食,但我是日食新手。 –

+0

謝謝我意識到我添加了罐子,但忘記了將它們導出。 –

+0

我有完全相同的問題,但我無法解決它,即使我將jar文件添加到我的項目的** libs **文件夾中,並將它們添加到項目屬性中的java構建路徑中。任何線索? – A23149577

相關問題