gpt4 book ai didi

java - 如何通过 JNI 设置我的类的 "Double"类型变量的值?

转载 作者:行者123 更新时间:2023-11-30 02:34:07 24 4
gpt4 key购买 nike

如果我只是想将值设置为 Double 类型变量,我可能会这样编码:

public static native int getDoubleVar(Double dobj);
JNIEXPORT jint JNICALL
test_jni_Native_testGet(JNIEnv *env, jclass type, jobject dobj)
{
jclass DoubleClass = env->FindClass("java/lang/Double");
jfieldID valueID = env->GetFieldID(DoubleClass, "value", "D");
env->SetDoubleField(dobj, valueID, 2.3);
return 0;
}

这些代码生效。

但是,当我试图通过 JNI 设置一个类的“Double”变量的值时,我得不到我想要的,当然,它崩溃了,这让我有点困惑。

Java 代码:

public class TestDouble
{

public Double value;
public long num;
public TestDouble(long num, Double value)
{
this.num = num;
this.value = value;
}
}

原生:

public static native int testGet(TestDouble tdobj);

c 代码:

JNIEXPORT jint JNICALL
test_jni_Native_testGet(JNIEnv *env, jclass type, jobject tdobj)
{
jclass tdobjClass = env->FindClass("xxxx/TestDouble");
jfieldID valueID = env->GetFieldID(tdobjClass, "value", "D");
env->SetDoubleField(tdobj, jValueID, 2.3);
return 0;
}

我想设置“TestDouble”类的“value”的值,并且“value”的类型是“Double”(不是 double )。

E/dalvikvm: VM aborting
Fatal signal 6
Send stop signal to pid:5830 in void debuggerd_signal_handler(int, siginfo_t*, void*)

我这里只是把关键的错词贴出来了,很明显错误发生在:

env->SetDoubleField(tdobj, jValueID, 2.3);

那我该怎么做才能解决这个问题呢?非常感谢!

最佳答案

我得到了正确答案:

http://stackoverflow.com/questions/34848605/how-to-set-the-value-of-a-double-integer-type-of-a-java-class-by-jni

JNIEXPORT jint JNICALL test_jni_Native_testSet(JNIEnv *env, jclass type, jobject tdobj)
{
//Create Integer class, get constructor and create Integer object
jclass intClass = env->FindClass(env, "java/lang/Integer");
jmethodID initInt = env->GetMethodID(env, intClass, "<init>", "(I)V");
if (NULL == initInt) return -1;
jobject newIntObj = env->NewObject(env, intClass, initInt, 123);

//Now set your integer into value atttribute. For this, I would
//recommend you to have a java setter and call it in the same way
//as shown above

//clean reference
env->DeleteLocalRef(env, newIntObj);
return 0;
}

Integer/Double 和其他包装器类型可以用同样的方式处理..

关于java - 如何通过 JNI 设置我的类的 "Double"类型变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812975/

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