【发布时间】:2016-01-15 14:14:26
【问题描述】:
如果我只想将值设置为 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);
那我该怎么做才能解决这个问题呢? 非常感谢!
【问题讨论】:
标签: java android c++ java-native-interface native