加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JNI返回Signal 7函数试图从C调用Java

发布时间:2020-12-14 19:32:37 所属栏目:Java 来源:网络整理
导读:我想打个电话从C到 Java.我尝试调用一个函数来反转一个没有参数的bool值. 这是我的C代码 /** * Check if Internet Connection is ONLINE */bool InterfaceJNI::isInternetConnected(){ JavaVM* jvm = JniHelper::getJavaVM(); int status; JNIEnv *env; jmet
我想打个电话从C到 Java.我尝试调用一个函数来反转一个没有参数的bool值.

这是我的C代码

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

    bool isAttached = false;
    // jboolean o bool?
    bool returnValue = false;

    CCLog("Static isInternetConnected");

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

    if(status < 0)
    {
        //LOGE("callback_handler: failed to get JNI environment," // "assuming native thread");
        status = jvm->AttachCurrentThread(&env,NULL);
        CCLog("isInternetConnected Status 2: %d",status);
        if(status < 0)
        {
            // LOGE("callback_handler: failed to attach " // "current thread");
            return false;
        }
        isAttached = true;
        CCLog("isInternetConnected Status isAttached: %d",isAttached);
    }


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

    jclass mClass = env->FindClass("org/example/SocialNetwork/InternetConnection");

    // Get Static bool isInternetConnection()
    mid = env->GetStaticMethodID(mClass,"isInternetConnection","()Z");
    if (mid == 0)
    {
        CCLog("isInternetConnected FAIL GET METHOD STATIC");
        return false;
    }
    // Call Static bool isInternetConnection()
    returnValue = env->CallStaticBooleanMethod(mClass,mid);
    CCLog("isInternetConnected Done ");

            //-----------------------------------------------------------
    CCLog("Finish");
    if(isAttached)
        jvm->DetachCurrentThread();

    // Change for return value
    return returnValue;
}

我的Java代码:

public class InternetConnection 
{
    /**
     * Check if is working your hello world from C++
     */
    public static void helloWorld()
    {
        Log.v("InternetConnection","HELLO WORLD");
    }
    /**
     * Check Internet Connection
     * @return true is Online
     */
    public static Boolean isInternetConnection()
    {
        Log.v("InternetConnection","isInternetConnection Start");

        Context ctx = CCSocialNetwork.getAppContext();
        ConnectivityManager conMgr =  (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo i = conMgr.getActiveNetworkInfo();

        if (i == null)
        {
            Log.v("InternetConnection","isInternetConnection NULL :S");
            return false;
        }

        if (!i.isConnected())
        {
            Log.v("InternetConnection","isInternetConnection is not connected");
            return false;
        }

        if (!i.isAvailable())
        {
            Log.v("InternetConnection","isInternetConnection is not available");
            return false;
        }
        Log.v("InternetConnection","isInternetConnection DONE!");
        return true;
    }
}

但我得到:

Fatal signal 7 (SIGBUS) at 0x00000000 (code=128)

我有如果我能正确获得返回值,我也无法发送参数.

解决方法

您正在返回一个实际上是对象的布尔值.尝试返回布尔基元类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读