2012-05-03 24 views
5

Android用のOpenCVライブラリがあらかじめ構築されたJavaCVライブラリを使用しています。私はjavacv.jarとjavacpp.jarの両方のjarファイルをインクルードしているので、正しい方法でEclipseをセットアップしたと思います。また、私のプロジェクトでは、java-cv-android-arm.jarもあります。すべてのものがうまくコンパイルされ、エラーも警告もなく、実行時に間違ってしまうものを疑うべきものは何もありません。しかし、私は下のこのメソッドの本体にスローされる例外NoClassDefFoundErrorが出ます:例外がスローされAndroidのJavaCVジレンマ、IplImageが作成されたときにメソッド '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(挿入絵文字ここ)がある。「LIBSの

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) 

フォルダ構造のjarファイルをする必要が

enter image description here

+0

それが動作するはずですが...私は正確に同じ問題を抱えているが、私は、私はそれを行っているかもしれないと思う、それ – A23149577

答えて

5

をフォルダproject-root/libsフォルダに保存するか、プロジェクトのビルドパスでエクスポートしたものとしてマークしますCT ...

+0

を解決することはできません。しかし、私は確信していません。あなたの答えを編集して、それを行うための手順を教えてください。私は日食を使用していますが、私は日食に新しいです。 –

+0

私は瓶を追加したが、それらをエクスポートすることを忘れて気づいた。 –

+0

私はまったく同じ問題を抱えていますが、プロジェクトの** libs **フォルダにjarファイルを追加してもそれを解決することはできません。またプロジェクトプロパティのjavaビルドパスに追加することもできます。どんな手掛かり? – A23149577

関連する問題