2017-01-25 7 views
0

私は、コードの一部でopenCVを使用するビジョンターゲティングシステムに取り組んでいます。ステップの1つに、Matsの使用が含まれます。私はMat newMat = Mat()Mat newMat = Mat(2, 2, CvType.CV_8UC3)と他のいくつかのCvタイプを使って新しいマットを作りました。私が何を試みても、コードを実行すると、すぐに上記の行に達すると、アプリは完全にクラッシュします。スタックトレースは、2つのうちの1つを報告します。マット宣言の長い形式は(第二のコードスニペット)を使用した場合には、次のようになります。新しいMat変数を作成するとAndroidアプリがクラッシュする

E/ActivityThread: Activity org.firstinspires.ftc.robotcontroller.internal.FtcRobotControllerActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
        android.app.IntentReceiverLeaked: Activity org.firstinspires.ftc.robotcontroller.internal.FtcRobotControllerActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
         at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:918) 
         at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:719) 
         at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1172) 
         at android.app.ContextImpl.registerReceiver(ContextImpl.java:1152) 
         at android.app.ContextImpl.registerReceiver(ContextImpl.java:1146) 
         at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:554) 
         at com.qualcomm.analytics.Analytics.register(SourceFile:209) 
         at com.qualcomm.analytics.Analytics.<init>(SourceFile:235) 
         at com.qualcomm.modernrobotics.ModernRoboticsUsbUtil.init(SourceFile:85) 
         at com.qualcomm.ftccommon.FtcEventLoop.init(FtcEventLoop.java:191) 
         at com.qualcomm.robotcore.eventloop.EventLoopManager.startEventLoop(EventLoopManager.java:571) 
         at com.qualcomm.robotcore.eventloop.EventLoopManager.setEventLoop(EventLoopManager.java:545) 
         at com.qualcomm.robotcore.eventloop.EventLoopManager.start(EventLoopManager.java:489) 
         at com.qualcomm.robotcore.robot.Robot.start(Robot.java:59) 
         at com.qualcomm.ftccommon.FtcRobotControllerService$RobotSetupRunnable$1.run(FtcRobotControllerService.java:186) 
         at com.qualcomm.robotcore.util.ThreadPool.logThreadLifeCycle(ThreadPool.java:513) 
         at com.qualcomm.ftccommon.FtcRobotControllerService$RobotSetupRunnable.run(FtcRobotControllerService.java:128) 
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
         at java.lang.Thread.run(Thread.java:818) 

しかし、私は短い形式(第一のコードスニペット)を使用する必要があり、私はこれを取得するだけでなく、の内容最初のスタックトレース

E/art: No implementation found for void org.opencv.core.Mat.n_delete(long) (tried Java_org_opencv_core_Mat_n_1delete and Java_org_opencv_core_Mat_n_1delete__J) 
E/System: Uncaught exception thrown by finalizer 
E/System: java.lang.UnsatisfiedLinkError: No implementation found for void org.opencv.core.Mat.n_delete(long) (tried Java_org_opencv_core_Mat_n_1delete and Java_org_opencv_core_Mat_n_1delete__J) 
       at org.opencv.core.Mat.n_delete(Native Method) 
       at org.opencv.core.Mat.finalize(Mat.java:911) 
       at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:202) 
       at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:185) 
       at java.lang.Thread.run(Thread.java:818) 

なぜコードがクラッシュを引き起こしているのか簡単な説明はありますか?私が今実行しているコードでは、唯一の行はクラス宣言、関数宣言、およびマット宣言ですが、それはすべてのように見えます。

答えて

0

これは、主なアクティビティのコードが数行欠けていることが判明しました。彼らはopenCVライブラリを読み込み、存在しなければopenCVライブラリアプリを使用します。

これはOnCreate関数

if(!OpenCVLoader.initDebug()) { 
      RobotLog.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for Initialization"); 
      OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mOpenCVCallBack); 
     }else{ 
      RobotLog.d("OpenCV", "OpenCV library found inside package. Using it!"); 
      mOpenCVCallBack.onManagerConnected(LoaderCallbackInterface.SUCCESS); 
     } 
    } 

になり、これは右のメインアクティビティクラスの宣言を下回る:

private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) { 


     @Override 
      public void onManagerConnected(int status){ 
       switch (status){ 
        case LoaderCallbackInterface.SUCCESS: 
        { 
         RobotLog.i(TAG, "OpenCV Loaded Sucessfully"); 
        }break; 
        default: 
        { 
         super.onManagerConnected(status); 
        }break; 
       } 
      } 
     }; 
関連する問題