gpt4 book ai didi

java - 使用 JNI CallBooleanMethod 的异常信号 11

转载 作者:行者123 更新时间:2023-11-29 05:46:39 25 4
gpt4 key购买 nike

我在这一行中收到 SIGNAL 11:

// Call bool isInternetConnection()
jboolean jReturnValue = env->CallBooleanMethod(mClass,mid);

在这段代码中:

/**
* Check if Internet Connection is ONLINE
*/
bool InterfaceJNI::isInternetConnected()
{
JavaVM* jvm = JniHelper::getJavaVM();
int status;
JNIEnv *env;
jmethodID mid;

bool isAttached = false;
bool returnValue = false;

CCLog("InterfaceJNI isInternetConnected");

// Get Status
status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6);

if(status < 0)
{
CCLog("isInternetConnected Status < 0 Failed to get JNI Enviroment!!!");
status = jvm->AttachCurrentThread(&env, NULL);
CCLog("isInternetConnected Status 2: %d", status);
if(status < 0)
{
CCLog("isInternetConnected Status < 0 !!!");
return false;
}
isAttached = true;
CCLog("isInternetConnected Status isAttached: %d", isAttached);
}

CCLog("isInternetConnected Status: %d", status);

CCLog("isInternetConnected Finding Class....");
jclass mClass = env->FindClass("org/example/SocialNetwork/CCSocialNetwork");

// Get Static bool isInternetConnection()
CCLog("isInternetConnected Getting method....");
mid = env->GetMethodID(mClass, "isInternetConnection", "()Z");
if (mid == 0)
{
CCLog("isInternetConnected FAIL GET METHOD STATIC");
return false;
}
CCLog("isInternetConnected Calling method....");
// Call bool isInternetConnection()
jboolean jReturnValue = env->CallBooleanMethod(mClass,mid);
CCLog("Call done ");
// Convert value from Java to C++
returnValue = (bool)jReturnValue;
CCLog("isInternetConnected Done ");

if(isAttached)
jvm->DetachCurrentThread();

// Change for return value
return returnValue;
}

但我不知道为什么。如果我使用“()V”进行无效调用,则工作正常,但当我尝试调用返回 boolean 值的函数时。

这是怎么回事?

最佳答案

是否是静态方法?您在代码中的注释表明它是静态的,而您的方法调用则不是。

如果它是 NOT 静态的,那么您将不得不使用对象而不是像现在这样的类来调用 CallBooleanMethod。否则,您将不得不对类使用 CallStaticBooleanMethod

jobject someObject = <get or create the object somehow>
jboolean jReturnValue = env->CallBooleanMethod(someObject,mid);

jboolean jReturnValue = env->CallStaticBooleanMethod(mClass,mid);

无论哪种方式,您都必须决定是否使用静态方法。

关于java - 使用 JNI CallBooleanMethod 的异常信号 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647038/

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