Note that there are some explanatory texts on larger screens.

plurals
  1. POIssue calling back into Java from C++ called during a GLSurcfaceView callback
    primarykey
    data
    text
    <p>I have a GLSurfaceView created in a JAR file within my Android app. In the GLSurfaceView callback for onDrawFrame, I call a native C++ method via JNI. At this point, I believe I am in the GLThread, and in that native method, I am trying to call back into a Java class in my App's namespace and NOT into the namespace which made the call. So, I am trying to explicitly attach to the UI thread before doing so, but I am not successful.</p> <p>I am receiving the following error</p> <pre><code>W/dalvikvm( 4243): JNI WARNING: can't call Lcom/main/myapp;.updateView on instance of Lorg/myorg/myRenderer; W/dalvikvm( 4243): in Lorg/myorg/ImageRenderer;.renderImageFrame:()V (CallVoidMethodV) I/dalvikvm( 4243): "GLThread 336" prio=5 tid=16 RUNNABLE I/dalvikvm( 4243): | group="main" sCount=0 dsCount=0 obj=0x418029f8 self=0x400988a8 I/dalvikvm( 4243): | sysTid=4268 nice=0 sched=0/0 cgrp=apps handle=1362099424 I/dalvikvm( 4243): | schedstat=( 0 0 0 ) utm=83 stm=71 core=1 I/dalvikvm( 4243): at org.myorg.ImageRenderer.renderImageFrame(Native Method) I/dalvikvm( 4243): at org.myorg.ImageRenderer.onDrawFrame(ImageRenderer.java:93) I/dalvikvm( 4243): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516) I/dalvikvm( 4243): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) </code></pre> <p>My C++ code looks like : </p> <pre><code>JavaVM * jvm; JNIEXPORT void JNICALL Java_org_myorg_ImageRenderer_renderImageFrame (JNIEnv *env, jobject jObj) { jvm-&gt;AttachCurrentThread(&amp;env, 0); jclass javaClass = env-&gt;FindClass("com/main/myapp"); if(javaClass == NULL){ LOGD("ERROR - CANNOT FIND CLASS"); } jfloatArray viewArray = env-&gt;NewFloatArray(16); env-&gt;SetFloatArrayRegion(viewArray, 0, 16, glmatrix.data); jmethodID method = env-&gt;GetMethodID(javaClass, "updateView", "([F)V"); if(method == NULL){ LOGD("ERROR - CANNOT ACCESS METHOD"); } env-&gt;CallVoidMethod(jObj, method, viewArray); env-&gt;DeleteLocalRef(viewArray); jvm-&gt;DetachCurrentThread(); } JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved){ jvm = vm; return JNI_VERSION_1_2; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload