2013-03-25 42 views
5

。我尝试调用一个函数,该函数会在不带参数的情况下重新调整布尔值。JNI返回信号7函数试图从C++调用Java到Java中我想调用从C++到Java的调用

这是我的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) 

而且我如果我能正确地得到一个返回值,我都不能发送参数。

+1

你正在返回一个实际上是一个对象的布尔值。尝试返回一个布尔基元类型。 – maba 2013-03-25 21:00:08

+0

我试图在Java中添加一个布尔变量,但不是那 – vgonisanz 2013-03-25 21:16:26

+0

失败的行是“mid = env-> GetStaticMethodID(mClass,”isInternetConnection“,”()Z“);”如果我评论说,以及如果,如果信号不出现 – vgonisanz 2013-03-25 21:17:46

回答

3

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

0

你确定FindClass没有返回NULL吗?你没有检查它