gpt4 book ai didi

java - JNI 检测到应用程序错误 : use of invalid jobject when calling NewObject for innerclass

转载 作者:行者123 更新时间:2023-11-28 08:34:49 25 4
gpt4 key购买 nike

这是我的 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。我只是不知道我在这里做错了什么。

当调用 env->NewObject 时,它提示我 JNI 检测到应用程序错误:使用无效的 jobject 0xd18a1c78

谢谢。

最佳答案

谢谢@Botje、@Petesh 和@Seelenvirtuose,你们的回答帮助我理解了在 JNI 中使用内部类。我对此很陌生。

我解决问题的方法是,我遵循此链接中的答案 In JNI, how do I cache the class, methodID, and fieldIDs per IBM's performance recommendations?由@Petesh 共享,并为我的内部类 MyVector 和我的外部类 MyActivity 的 ID 做了一个全局引用。

所以,为了创建内部类的对象,这是我必须做的。

auto jObj = env->NewObject(InnerClassID, InnerClassConstructorID, OuterclassObject, Params);

关于java - JNI 检测到应用程序错误 : use of invalid jobject when calling NewObject for innerclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com