Java 如何从静态方法显示对话框

Java 如何从静态方法显示对话框,java,android,dialog,cocos2d-x,android-context,Java,Android,Dialog,Cocos2d X,Android Context,在我的游戏中,我必须(针对Android)显示视频,这是针对Android和IOS使用cocos2dx完成的。我计划在对话框中显示它(在游戏视图的顶部)。问题是,我并没有引用任何活动来显示对话框(因为对话框只能在活动中显示)。尽管在cocos2dx lib文件夹中有一个cocos2dx活动,但我不知道如何利用它。从C++代码中,我调用java类的静态方法,如 void LMJNICommunicator::showVideo() { LOGD("initialiseDatabase i

在我的游戏中,我必须(针对Android)显示视频,这是针对Android和IOS使用
cocos2dx
完成的。我计划在对话框中显示它(在游戏视图的顶部)。问题是,我并没有引用任何活动来显示对话框(因为对话框只能在活动中显示)。尽管在cocos2dx lib文件夹中有一个
cocos2dx活动
,但我不知道如何利用它。从C++代码中,我调用java类的静态方法,如

void LMJNICommunicator::showVideo()
{
     LOGD("initialiseDatabase inside LMJNICommunicator");

     jmethodID methodID = 0;
     JNIEnv *pEnv = 0;
     pEnv = getJNIEnv();
     jclass ret = pEnv->FindClass("com/mobinius/lostmonstersclass/LMDatabaseDataManager");
     methodID = pEnv->GetStaticMethodID(ret, "showVideo", "()V");

     if (! methodID)
     {
          LOGD("Failed to find static method id of %s", "showVideo");
          return;
     }

     pEnv->CallStaticVoidMethod(ret,methodID);
     pEnv->DeleteLocalRef(ret);

}

静态方法(在正常java类中),我从C++代码< /p>调用

Class LMDatabaseDataManager {

    public static void showVideo() {

         Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());
         dialog.show();
        // getting Can't create handler inside thread that has not called Looper.prepare() error
    }
}
我尝试使用
处理程序
like,但没有得到结果(在那篇文章中得到了相同的错误)。
还尝试获取类似的静态
上下文

那么,我的方法正确吗?如果不正确,请建议如何实现相同的方法。谢谢

编辑:

终于找到了答案。早些时候,我尝试在UI线程上运行应用程序静态上下文作为链接,但没有得到。。。通过Cocos2dxActivity活动实例,我得到了它

Class LMDatabaseDataManager {

    public static void showVideo() {        

    Cocos2dxActivity.getInstance().runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Dialog dialog = new Dialog(Cocos2dxActivity.getInstance());
            dialog.show();            
        }
    });

    }
}

尝试在Cocos2dxActivity中添加适当的行:

public class Cocos2dxActivity extends Activity {
    private static Cocos2dxActivity instance = null;
   @Override public void onCreate(Bundle b) {
     ...
     this.instance = this;
     }

     public static Cocos2dxActivity getInstance() {
        return instance;
     }



}
要创建对话框时,请执行以下操作:

if (Cocos2dxActivity.getInstance() != null)  {
    AlertDialog dialog = new AlertDialog(Cocos2dxActivity.getInstance());
    // rest of your dialog code goes here
}

你没有在活动上覆盖你的视频吗?实际上没有。。。正如我在问题中所解释的,thr是一个名为Cocos2dxActivity的活动,其中GLSurfaceView都在运行。。。我不知道我是否能利用它谢谢你的回复。。。有一次我在上面尝试了获取应用程序全局上下文,如我的问题第二个链接中所示,但没有得到结果。。。无论如何,我会尝试你的答案让你知道我尝试了你的答案。。。它的抛出错误“无法在未调用Looper.prepare()的线程中创建处理程序”非常感谢您抽出时间。。。我解决了这个问题。早些时候,我尝试在UI线程上运行应用程序静态上下文,如第二个链接所述,但没有得到。。。通过Cocos2dActivity实例,我得到了它……我认为this.instance=null;应该从onDestroy()方法中调用。否则,一旦活动死机,就会发生内存泄漏,因为将保留对死机活动的引用。更多信息: