如何解决当调用GetFieldID来恢复jni中的自定义Java类的成员ID时,卡在奇怪的崩溃上
这是一个自定义的Java类:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.PointF;
import android.graphics.Rect;
public class MainActivity extends AppCompatActivity {
public static class FaceShape {
public PointF [] faceProfile;
public PointF [] leftEyebrow;
public PointF [] rightEyebrow;
public PointF [] leftEye;
public PointF [] rightEye;
public PointF [] nose;
public PointF [] mouth;
public PointF [] pupil;
float confidence;
}
public static class TrackedFace {
public FaceShape faceShape;
public Rect faceRect;
public int frameId;
}
...
}
现在,我想用本机代码恢复TrackedFace
的所有成员的字段ID:
jclass clsTrackedFace = env->FindClass("com/example/myapplication/MainActivity$TrackedFace");
jfieldID faceShapeId = env->GetFieldID(clsTrackedFace,"faceShape","Lcom/example/myapplication/MainActivity/FaceShape;");
jfieldID faceRectId = env->GetFieldID(clsTrackedFace,"faceRect","Landroid/graphics/Rect;");
在设备上运行程序时,Android Studio的logcat显示以下错误:
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: JNI DETECTED ERROR IN APPLICATION: JNI GetFieldID called with pending exception 'java.lang.NoSuchFieldError' thrown in unknown throw location
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: in call to GetFieldID
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: from java.lang.String com.example.myapplication.MainActivity.stringFromJNI()
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: "main" prio=5 tid=1 Runnable
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: | group="main" sCount=0 dsCount=0 obj=0x7515afa8 self=0x7f8309a000
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: | sysTid=18792 nice=0 cgrp=default sched=0/0 handle=0x7f8711de30
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: | state=R schedstat=( 364733924 74412465 219 ) utm=31 stm=5 core=1 HZ=100
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: | stack=0x7ffda7a000-0x7ffda7c000 stackSize=8MB
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: | held mutexes= "mutator lock"(shared held)
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: at com.example.myapplication.MainActivity.stringFromJNI(Native method)
11-05 21:47:13.232 18792-18792/com.example.myapplication E/art: at com.example.myapplication.MainActivity.onCreate(MainActivity.java:58)
调试器可以帮助我确认是否从该行引发了异常:
jfieldID faceRectId = env->GetFieldID(clsTrackedFace,"Landroid/graphics/Rect;");
并且我注意到 faceShapeId为NULL ,所以我基本上可以确保恢复faceShape
字段的字段ID时会出现一些错误,谁能帮帮我?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。