2014-01-14 84 views
1

所以我的問題是,我需要這些方法來運行一個又一個,但我不能解決如何使方法等待運行之前。 任何幫助表示讚賞。謝謝。 這裏是我的代碼:如何讓Java在繼續之前等待方法完成?

public void startMoving() throws InterruptedException 
{ 
    moveEnemy("right",3); 
    wait(); 
    moveEnemy("down",3); 
    wait(); 
    moveEnemy("right",2); 
    wait(); 
    moveEnemy("up",1); 
    wait(); 
    moveEnemy("right",2); 
    wait(); 
    moveEnemy("up",2); 
    wait(); 
    moveEnemy("right",2); 
    wait(); 
    moveEnemy("down",4); 
    wait(); 
    moveEnemy("left",1); 
    wait(); 
    moveEnemy("down",2); 
    wait(); 
    moveEnemy("right",3); 
    wait(); 
    moveEnemy("up",2); 
    wait(); 
    moveEnemy("right",1); 
    wait(); 
    moveEnemy("up",1); 
    wait(); 
    moveEnemy("right",3); 
} 
public void moveEnemy(final String direction, final int numMoves) 
{ 
    Thread moveThread = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      isMoving = true; 
      int originalX = getX(); 
      int originalY = getY(); 
      for(int loop = 0; loop <= 98*numMoves; loop++) 
      { 
       try 
       { 
        Thread.sleep(5); 
       } 
       catch (InterruptedException e){} 
       if(direction.equals("up")) 
       { 
        setLocation(originalX,originalY+loop); 
       } 
       if(direction.equals("down")) 
       { 
        setLocation(originalX,originalY-loop); 
       } 
       if(direction.equals("left")) 
       { 
        setLocation(originalX-loop,originalY); 
       } 
       if(direction.equals("right")) 
       { 
        setLocation(originalX+loop,originalY); 
       } 
      } 
      try 
      { 
       Thread.sleep(50); 
      } 
      catch (InterruptedException e){} 
      notify(); 
     } 
    }); 
    moveThread.start(); 
+0

'thread.wait()':

更多相關信息,在給定? – sircapsalot

+0

很可能Thread.sleep(),我假設他想等待一段時間 – MWB

+3

不要在UI線程中睡覺或等待... – assylias

回答

1

您可以使用Thread.sleep(timeInMiliseconds)暫停當前執行的線程。如果這是用於更新UI的相同線程,那麼在睡眠期間UI將被凍結,因此最好將所有UI的內容保留在其自己的線程中。

+4

最好不要再使用'Thread.sleep()'。它已經很老了,並且已經有了更好的線程抽象層,比如'java.util.concurrent。*'。線程應該與控制器「簽入」以確定流量。 – SnakeDoc

5

最簡單的解決方案可能是不使用線程,但我懷疑這是你想要的。

什麼,你可能會尋找的是鎖的概念:

一種方法,可以通過調用獲取與對象相關的鎖:

synchronized(nameOfTheLockObject) { 
    //do some code here 
} 

此獲取給定對象的鎖,執行代碼並在之後釋放鎖。如果鎖已經被另一個方法/線程獲取,代碼會暫停,直到鎖被其他方法/線程釋放。

您還可以將synchronized語句添加到類的方法中,以使它們獲取父對象的鎖定。 http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

+0

值得爲您的解決方案做一些示範。只是想到這裏來的人,可能正在等待一個更「強」的答案。 – ivanleoncz

相關問題