JNI 在应用程序中检测到错误:在为 innerclass 调用 NewObject 时使用了无效的 jobject
JNI DETECTED ERROR IN APPLICATION: use of invalid jobject when calling NewObject for innerclass
这是我的java文件的样子:
public class MyActivity
{
public class MyVector
{
public float X;
public float Y;
public float Z;
public MyVector()
{
this.X = 0.0f;
this.Y = 0.0f;
this.Z = 0.0f;
}
public MyVector(float InX,float InY, float InZ)
{
this.X = InX;
this.Y = InY;
this.Z = InZ;
}
public void SetMyVector(float InX,float InY, float InZ)
{
X = InX;
Y = InY;
Z = InZ;
}
}
}
这是我的 cpp 方法的样子:
static auto MyVectorClassID = env->FindClass("com/example/Test/MyActivity$MyVector");
static auto MyVectorParamCtorID = env->GetMethodID(MyVectorClassID, "<init>", "(Lcom/example/Test/MyActivity;FFF)V");
MyVector SomeVector{ 10.0f, 10.0f, 10.0f };
jfloat FloatX = SomeVector.X;
jfloat FloatY = SomeVector.Y;
jfloat FloatZ = SomeVector.Z;
auto jObj = env->NewObject(MyVectorClassID, MyVectorParamCtorID, FloatX, FloatY, FloatZ); // Crashes my android device here.
在我的 cpp 代码中,我有一个名为 MyVector 的结构,类似于 java 类 MyVector。 我只是不知道我在这里做错了什么。
它给了我JNI 在应用程序中检测到的错误:调用 env->NewObject 时使用了无效的 jobject 0xd18a1c78。
谢谢。
谢谢你,@Botje,@Petesh和@Seelenvirtuose,你的回答帮助我理解了在 JNI 中使用内部类。我是新手。
我解决问题的方法是,我按照此链接中的答案进行操作 在 JNI 中,如何根据 IBM 的性能建议缓存类、方法 ID 和字段 ID? 由@Petesh共享,并为我的内部类 MyVector 和我的外部类 MyActivity 的 ID 做了全局引用。
因此,为了创建内部类的对象,这就是我必须做的。
auto jObj = env->NewObject(InnerClassID, InnerClassConstructorID, OuterclassObject, Params);
相关文章:
- 使用赋值运算符重载从类中返回jobject
- React Native (Android):无法通过 JNI 在 jobject 中返回字符串
- JNI 在应用程序中检测到错误:在为 innerclass 调用 NewObject 时使用了无效的 jobject
- 如何调用传递给 JNI 'jobject' 的 Java 对象的子类/子类的方法
- 没有一个不是用NewObject,NewNamedObject或ConstructObject构建的,但它是
- 如何从 Jobject 中获取 jstring ? C++
- 如何在 JNI 中访问 jobject 的值
- 将 JNI -> jobject(基本上是 java 文件中的映射和/或映射的映射)转换为 std::map(c++)
- 如果我有一个类,如何返回一个 jobject?
- jni deleteRef for jclass and jobject
- jbyteArray 是一个 jobject (即:作为 DeleteLocalRef 的参数)
- JNI:MAP jobject到本机C 对象
- 如何在invokeshutdown方法中获取jobject
- Android NDK / General JNI 问题:将对象/jobject 转换为 c++ 用户 defiend
- 对JNI类型(如jobject)的C++引用
- C++/JNI-存储对象(jobject)在向量和数组中发生意外更改,C++或JNI问题
- 在JNI jobject中存储一个c++对象实例,稍后检索
- Android - JNI NewObject()传递给Java时不保存值
- 分段错误-如何在JNI中为C++创建的新线程不断调用java实例jobject
- JNI:给定jobject,获取它的缓存方法