Java 如何从静态方法显示对话框
在我的游戏中,我必须(针对Android)显示视频,这是针对Android和IOS使用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
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()方法中调用。否则,一旦活动死机,就会发生内存泄漏,因为将保留对死机活动的引用。更多信息: