2011-11-23 182 views
4

我測試下面的代碼,Toast消息沒有出現,並且「TestMethod」沒有調用「Catch」方法,請幫助我?從另一個線程運行線程

public void TestMethod() 
{ 
    Test= new Thread(new Runnable() { 
     public void run() { 
      try{ 
       Catch(); 
      } 
      catch (Exception ioe) 
      { 

      } 

     } 
    }); 
    Test.start(); 
} 
public void Catch() 
{ 
    Test2= new Thread(new Runnable() { 
     public void run() { 
      try{ 
       Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show(); 
      } 
      catch (Exception ioe) 
      { 

      } 

     } 
    }); 
    Test2.start(); 
} 

回答

4

只能從UI線程敬酒。如果你有機會到活動中,你可以改變你的代碼像THI

public void TestMethod() 
{ 
    Test= new Thread(new Runnable() { 
     public void run() { 
      try{ 
       Catch(); 
      } 
      catch (Exception ioe) 
      { 

      } 

     } 
    }); 
    Test.start(); 
} 
public void Catch() 
{ 
    activity.runOnUiThread(new Runnable() { 
     public void run() { 
      try{ 
       Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show(); 
      } 
      catch (Exception ioe) 
      { 

      } 

     } 
    }); 

} 
6

可能是runOnUiThread對您有幫助。

  • runOnUiThread讓你騎在UI線程上,讓你在UI線程上執行動作。

試試這個:

runOnUiThread(new Runnable() 
{ 
     public void run() 
     { 
     Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show(); 
     } 
}); 
5

您應該在UI線程中調用Toast.makeText。閱讀this瞭解更多詳情。

2

您正在使用的線程不允許吐司顯示。你必須在UI線程上做與UI相關的東西。如果你不在主線程上,那麼你需要使用runOnUiThread。

3

這是完整的解決方案,它應該很好地工作 一些方法將只在uithread運行,(runOnUiThread是活性的方法,因此,如果您不能達到它,不​​僅僅是把一個變量

private final Activity activity = this; 

,並呼籲從那裏

public void TestMethod() { 
Test= new Thread(new Runnable() { 
    public void run() { 
     try{ 
      Catch(); 
     } 
     catch (Exception ioe) { 
      //always log your exceptions 
      Log.e("simpleclassname", ioe.getMessage(), ioe); 
     } 
    } 
}); 
Test.start(); 
} 
public void Catch() { 
    Test2= new Thread(new Runnable() { 
    public void run() { 
     try{ 
      runOnUiThread(new Runnable() { 
       public void run() { 
        Toast.makeText(getApplicationContext(), "Yes", Toast.LENGTH_SHORT).show(); 
       }); 
     catch (Exception ioe) { 
      //always log your exceptions 
      Log.e("simpleclassname", ioe.getMessage(), ioe); 
     } 

    } 
}); 
Test2.start(); 

}

的runOnUiThread
相關問題