2012-05-03 6 views
5

Sto utilizzando la libreria JavaCV con librerie OpenCV predefinite per Android. Penso di aver impostato Eclipse nel modo giusto, perché ho incluso i vasi sia javacv.jar che javacpp.jar. Inoltre, il java-cv-android-arm.jar, nel mio progetto. Tutto si compila bene, senza errori, avviso, tutto ciò che dovrebbe essere sospetto di qualcosa che andrà storto in fase di runtime. Ma ottengo un'eccezione NoClassDefFoundError che viene gettato in questo metodo corpo di seguito:Dilemma JavaCV Android, NoClassDefFoundError gettato all'interno del metodo 'draw' quando viene creato IplImage

@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); 
    } 

E, naturalmente, subito dopo l'eccezione viene generata, i miei arresti di Android, e forzo chiudere l'applicazione. Ho incluso i vasi e le librerie richieste correttamente? C'è qualcosa di cui dovrei essere a conoscenza? Qualsiasi aiuto sarebbe molto apprezzato.

Ecco la LogCat per chi ama Gatti (inserto emoticon qui):

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) 

struttura delle cartelle 'librerie Cartella

enter image description here

+0

mi hanno lo stesso identico problema, ma non riesco a risolverlo – A23149577

risposta

5

I vasi devono essere nella cartella project-root/libs o contrassegnarli come esportati nel percorso di generazione del progetto ct ...

ora dovrebbe funzionare ...

+0

Credo che avrei potuto fare questo. Ma poi non sono sicuro. Puoi modificare la tua risposta per mostrarmi i passaggi per farlo. Sto usando Eclipse, ma sono nuovo di Eclipse. –

+0

grazie ho capito che ho aggiunto i barattoli ma ho dimenticato di esportarli. –

+0

Ho lo stesso identico problema, ma non riesco a risolverlo, anche se aggiungo i file jar nella cartella ** libs ** del mio progetto e li aggiungo anche nel percorso di sviluppo java nelle proprietà del progetto. Qualche indizio? – A23149577

Problemi correlati