我已按照本教程通过 jni 调用在 android 上启动 url。它运行成功。
以同样的方式,我想从我的 cocos2dx 层显示一条 toast 消息,如下所示:
public static void openURL(String url) {
Toast.makeText(me,url,Toast.LENGTH_LONG).show();
}
但它因错误而崩溃:Can't create handler with thread
. 你知道我怎样才能正确显示它吗?
试试下面的代码,这肯定对你有用。
首先像这样在类文件中创建一个 Runnable 接口,
Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "Your url string...",Toast.LENGTH_SHORT).show();
}};
然后创建一个 Handler 对象并调用该可运行接口,如下所示,
Create Handler object like,
Handler handler;
initialize it like,
onCreate(){
.................
handler = new Handler();
.................
}
then call runnable whenever you want like,
handler.post(runnable);
您不能在后台线程上运行 UI 内容。您应该使用 AsyncTask 并将该代码放在执行前/后执行中,或者如果您只是显示一个 toast,您可以在 UI 线程上运行它
runOnUiThread(new Runnable() {
}
所以这是从2012年开始的。
我想没有多少人使用 cocos2d-x。好的,这就是你在 cocos2d-x 上的做法。
编辑AppActivity.java
public class AppActivity extends Cocos2dxActivity
{
private Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.activity = this;
showToast();
}
public void showToast()
{
activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
Toast.makeText(activity, "Hello :D", 10).show();
}
});
}
}
这在 cocos2d-x 版本 3.x 中非常好用,我对其进行了测试。当然,JNI 只会调用该方法,这必须有效。