繁体   English   中英

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

[英]java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

当我尝试从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();

这是我在java类中的方法:

private void onClickPostStatusUpdate(int score) {
    System.out.println("Match3Activity.onClickPostStatusUpdate()");
    performPublish(PendingAction.POST_STATUS_UPDATE, canPresentShareDialog);
}

这是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);

尝试实例化一个活动。 通常,您不应该手动实例化Activity,而应使用指定的Android API(例如Context.startActivity创建它们。

通过绕过API,您将陷入一种不支持创建Activity的线程中创建Activity的情况。

这就是错误的原因。 而且:您可能想重新考虑整个代码。 不确定您要做什么,但似乎您使用的模式不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM