1

我已按照教程通过 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. 你知道我怎样才能正确显示它吗?

4

3 回答 3

2

试试下面的代码,这肯定对你有用。

  • 首先像这样在类文件中创建一个 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);
    
于 2013-04-24T07:19:31.210 回答
0

您不能在后台线程上运行 UI 内容。您应该使用 AsyncTask 并将该代码放在执行前/后执行中,或者如果您只是显示一个 toast,您可以在 UI 线程上运行它

runOnUiThread(new Runnable() {
}
于 2012-07-23T08:09:57.957 回答
0

所以这是从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 只会调用该方法,这必须有效。

于 2016-01-08T00:29:32.060 回答