Ah. That should be easy enough to debug.

Set a breakpoint at the log statement, and look at the stack. I bet
you're doing something from the UI thread, that doesn't return. Thus
the dialog code never gets run. If the breakpoint is not triggering in
the UI thread, pause the UI thread and see what it is doing at the
time.

So long as you have something running on the UI thread, it's blocked
for anything else, including dialogs.  If you are on the UI thread,
and have some loop going on or something, you're going to need to
return from it before the the Android dialog can be displayed.

ANRs really aren't that hard to debug, though perhaps not always easy
to fix. Just see what the UI thread is doing.

On Dec 15, 12:50 am, Цветко ЛАГАЈОВИЋ <[email protected]>
wrote:
> Hi,
>
> Yes sorry, I have not been precise enough.
>
> When I say it's not working, what I meen is that the execution gets through
> to the Java layer (the Log.i methods get called, and my message is logged in
> logcat) but the dialog is not displayed, and the application does not
> respond anymore. After some time I get an ANR notification and the app force
> closes.
>
> Florent.
>
>
>
>
>
>
>
> On Wed, Dec 15, 2010 at 2:28 AM, Bob Kerns <[email protected]> wrote:
> > What does "can't get it to work" mean?
>
> > Is mActivity really a reference to the correct activity?
> > Does is successfully find the method, or take the 'return false;'
> > exit? (Which is rather odd in a void method!)
> > Does it crash?
> > Does it call the Java code, but with a corrupted message?
>
> > If it's that last, I'd look for the usual C++ headaches, such as using
> > a std::string() that has been destructed by the time you use it.
>
> > If it's crashing: Where is it crashing? How is mJNIEnv declared and
> > assigned?
>
> > Have you stepped through it in a debugger? I don't know hard that is
> > to do on a device (or emulator) with the NDK, but you could certainly
> > write a little test app on your PC and test the C++ side there. You'd
> > have to substitute on the Java side, of course; a simple
> > System.out.println("Success: " + pMsg); would suffice.
>
> > If none of that helps, I'd suggest asking the question in a list that
> > relates to the NDK rather than the SDK. You'd find a larger pool of
> > people able to understand and answer your questions on the topic.
>
> > On Dec 14, 10:30 am, Floof <[email protected]> wrote:
> > > Hi list !
>
> > > I'm having this problem:
>
> > > In my application, I use a GLSurfaceView for 3D rendering. The real
> > > rendering is done by calling native methods, coded in C++.
>
> > > Once in a while (upon user clicks on 3D scene objects) the native
> > > rendering engine should be able to call Java methods (through JNI)
> > > that display a dialog box.
>
> > > I can't get it to work, that's driving me crazy.
>
> > > Here is the native method:
>
> > > [CODE]
> > > void MyCPlusPlusClass::showDialog(const std::string& pMsg)
> > > {
> > >     jclass lClass = mJNIEnv->GetObjectClass(mActivity);
> > >     if (!lClass)
> > >     {
> > >         return false;
> > >     }
> > >     jmethodID lMethId = mJNIEnv->GetMethodID(lClass,
> > > "showMessageDialog", "(Ljava/lang/String;)V");
> > >     if (!lMethId)
> > >     {
> > >         return false;
> > >     }
> > >     jstring lJavaString = mJNIEnv->NewStringUTF(pMessage.c_str());
> > >     mJNIEnv->CallVoidMethod(mActivity, lMethId, lJavaString);}
>
> > > [/CODE]
>
> > > Then, the method showMessageDialog, coded in Java, in my activity:
>
> > > [CODE]
> > > public void showMessageDialog(String pMsg)
> > > {
> > >     Log.i("Vg", "Create dialog with message " + pMsg);
> > >     Log.i("Vg", "Show dialog");
> > >     runOnUiThread(
> > >         new Runnable () {
> > >             public void run () {
> > >                 AlertDialog.Builder lAlertBox = new
> > > AlertDialog.Builder(this);
> > >                 TextView lTextView = new TextView(MyActivity.this);
> > >                 lTextView.setText(mMessage);
> > >                 lAlertBox.setView(lTextView);
> > >                 lAlertBox.setNeutralButton("Ok", MyActivity.this);
> > >                 lAlertBox.setOnCancelListener(MyActivity.this);
> > >                 lAlertBox.show();
> > >             }
> > >         }
> > >     );}
>
> > > [/CODE]
>
> > > I thought this would work, but it doesn't. What am I doing wrong ?
>
> > > Thanks
> > > Florent.
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]<android-developers%2Bunsubs 
> > [email protected]>
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to