2015-12-15 224 views
-1
Thread b = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        location = relocation(); 
        //log("location success"); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    b.start(); 
    b.join(); 

    if (location.y>0) 
    { 

     location_home.x = 4.5f; 
     location_home.y = 4.5f; 
     location_home.theta = (float)Math.PI; 
    } else 
    { 
     location_home.x = -4.5f; 
     location_home.y = -4.5f; 
     location_home.theta = 0; 
    } 

我用b.join()等待一段時間,直到var位置從重定位接收值來爲location_home定義值。但是它錯了。線程b和if語句同時運行。幫我:(TKS所有如何等待一個線程完成

+1

使用非同步任務爲 – Pavya

回答

0

我想,如果你在這種情況下使用Asyntask這將是很好:

private class YourThread extends AsyncTask { 
    @Override 
    protected Object doInBackground(Object[] params) { 
     try { 
      location = relocation(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Object o) { 
     super.onPostExecute(o); 
     //log("location success"); 
     if (location.y > 0) { 
      location_home.x = 4.5f; 
      location_home.y = 4.5f; 
      location_home.theta = (float) Math.PI; 
     } else { 
      location_home.x = -4.5f; 
      location_home.y = -4.5f; 
      location_home.theta = 0; 
     } 
    } 
} 

,並使用它:

new YourThread().execute(); 
+0

你缺少AsyncTask聲明中的參數類型 –

+0

現在,在聲明和'doInBackground()'和'onPostExecute()'方法之間存在不匹配的類型。 –