java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序

java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序,java,java-native-interface,cocos2d-x,Java,Java Native Interface,Cocos2d X,当我试图从JNI调用java类中的非静态方法时,我遇到一个异常。我遇到的异常是: 无法在未调用Looper.prepare的线程内创建处理程序 以下是我的JNI调用代码: jclass mClass = env->FindClass("com/secrethq/match3/Match3Activity"); jmethodID constructor = env->GetMethodID( mClass, "<init>", "()V"); CCLog("jClass

当我试图从JNI调用java类中的非静态方法时,我遇到一个异常。我遇到的异常是:

无法在未调用Looper.prepare的线程内创建处理程序

以下是我的JNI调用代码:

jclass mClass = env->FindClass("com/secrethq/match3/Match3Activity");

jmethodID constructor = env->GetMethodID( mClass, "<init>", "()V");
CCLog("jClass Located?");

jobject object = env->NewObject(mClass, constructor);
mid = env->GetMethodID(mClass, "onClickPostStatusUpdate", "(I)V");


CCLog("mID: %d", mid);

if (mid!=0)
env->CallVoidMethod(mClass, mid, object, score);
        //-----------------------------------------------------------
CCLog("Finish");
if(isAttached)
    jvm->DetachCurrentThread();
以下是Logcat输出:

06-22 20:20:39.342: E/AndroidRuntime(14899): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-22 20:20:39.342: E/AndroidRuntime(14899):    at android.os.Handler.<init>(Handler.java:121)
06-22 20:20:39.342: E/AndroidRuntime(14899):    at android.app.Activity.<init>(Activity.java:772)
06-22 20:20:39.342: E/AndroidRuntime(14899):    at org.cocos2dx.lib.Cocos2dxActivity.<init>(Cocos2dxActivity.java:37)
06-22 20:20:39.342: E/AndroidRuntime(14899):    at com.secrethq.match3.Match3Activity.<init>(Match3Activity.java:45)
06-22 20:20:39.342: E/AndroidRuntime(14899):    at org.cocos2dx.lib.Cocos2dxRenderer.nativeTouchesEnd(Native Method)
06-22 20:20:39.342: E/AndroidRuntime(14899):    at    org.cocos2dx.lib.Cocos2dxRenderer.handleActionUp(Cocos2dxRenderer.java:129)
06-22 20:20:39.342: E/AndroidRuntime(14899):    at     org.cocos2dx.lib.Cocos2dxGLSurfaceView$9.run(Cocos2dxGLSurfaceView.java:258)
06-22 20:20:39.342: E/AndroidRuntime(14899):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462) 
06-22 20:20:39.342: E/AndroidRuntime(14899):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
该行:

jobject object = env->NewObject(mClass, constructor);
尝试实例化活动。一般来说,您不应该手动实例化活动,而是使用指定的Android API(例如Context.startActivity)创建活动

通过绕过API,您已经陷入了这样一种情况:您在一个线程中创建了一个不支持创建活动的活动


这就是错误的原因。而且:您可能想重新思考代码作为一个整体。不确定你想做什么,但是看起来你使用的模式是正确的。

谢谢你的回复。我试图通过JNI从C++类中调用java类中的非静态函数。请提出另一种解决方案。谢谢。你成功地从C++调用了一个非静态java函数。这不是问题所在。问题是您没有正确地与Android框架交互。但是,在更高的层次上,如果不知道你想要实现的是什么,就无法提出更好的方法。我正试图在cocos2d-x中在facebook上发布用户的分数。我使用的是facebook提供的Hellofacebook android示例。现在,如果我将onClickPostStatusUpdate方法设置为静态,那么我必须将示例中的所有方法都设置为静态因为它们是相互连接的,而且它在C++和java字符串中显示了一些其他的错误。请帮助。看起来HelloFacebook示例应用程序并不是专门为此设计的。您将无法按原样重用代码,必须自己编写一些东西。您可以直接调用C++中的脸谱网API或实现自己的OnCLICKESTATSUpUpStudio等方法,并调用C++中的那些可能实现为静态方法的方法,通过使所有java所需的方法静态化来完成它。谢谢您的帮助。
jobject object = env->NewObject(mClass, constructor);