从另一个线程运行线程

时间:2011-11-23 11:34:51

标签: java android multithreading

我测试下面的代码并没有出现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();
 }

5 个答案:

答案 0 :(得分:6)

可能runOnUiThread对您有所帮助。

  • runOnUiThread允许您使用UI线程,让您在UI线程上执行操作。

试试这个:

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

答案 1 :(得分:5)

您应该在UI线程上调用Toast.makeText。请阅读this了解详情。

答案 2 :(得分:4)

您只能从UI主题进行干杯。如果您有权访问该活动,则可以更改您的代码,例如

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) 
             {

             }

         }
     });

 }

答案 3 :(得分:3)

这是完整的解决方案,应该可以完美运行 有些方法只能在uithread上运行,(runOnUiThread是活动的一个方法,所以如果你不能达到它,那么只需要放一个变量

private final Activity activity = this;

并从那里调用runOnUiThread

 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();

}

答案 4 :(得分:2)

您正在使用的主题不允许toast显示。您必须在UI线程上执行与UI相关的内容。如果您不在主线程上,那么您需要使用runOnUiThread。