2012-07-23 70 views
1

我跟着this教程通過jni調用在android上啓動一個url。它運行成功。
以同樣的方式,我想從我的cocos2dx層這樣的顯示敬酒消息:通過jni調用在android上顯示toast消息

public static void openURL(String url) { 
    Toast.makeText(me,url,Toast.LENGTH_LONG).show(); 
} 

但它與錯誤而崩潰:Can't create handler with thread。你知道我該如何正確顯示它?

+0

也許[這篇文章](http://stackoverflow.com/questions/3614663/cant-create-handler-inside-thread-that-has-not-called-looper-prepare-inside-a)可以幫助你。 – cosmincalistru 2012-07-23 07:22:54

回答

0

您無法在後臺線程上運行UI資料。 您應該使用的AsyncTask,並把這些代碼在對前/後執行,或者如果你只是顯示敬酒,你可以在UI線程

runOnUiThread(new Runnable() { 
} 
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(); 
    }}; 
    
  • 然後創建一個處理程序對象,並調用象下面這樣Runnable接口,

    Create Handler object like, 
    
    Handler handler; 
    
    initialize it like, 
    
    onCreate(){ 
        ................. 
        handler = new Handler(); 
        ................. 
    } 
    
    then call runnable whenever you want like, 
    
    handler.post(runnable); 
    
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只會調用這個方法,這個必須工作。

相關問題