簡體   English   中英

如何使Java等待方法完成才能繼續?

[英]How do I make Java wait for a method to finish before continuing?

所以我的問題是我需要這些方法一個接一個地運行,但是我無法弄清楚如何讓這些方法在運行之前先等待。 任何幫助表示贊賞。 謝謝。 這是我的代碼:

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

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

您可能正在尋找的是鎖的概念:

一種方法可以通過調用以下命令來獲取與對象關聯的鎖:

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

這將獲取給定對象的鎖,執行代碼,然后釋放該鎖。 如果該鎖已被另一個方法/線程獲取,則代碼將暫停,直到另一個方法/線程釋放該鎖為止。

您也可以將同步語句添加到類的方法中,以使它們獲取父對象的鎖。

關於此的更多信息,請參見http : //docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM