如何让Java在继续之前等待方法完成?

如何让Java在继续之前等待方法完成?,java,methods,jframe,jbutton,wait,Java,Methods,Jframe,Jbutton,Wait,所以我的问题是,我需要这些方法一个接一个地运行,但我无法确定如何让这些方法在运行之前等待。 感谢您的帮助。非常感谢。 这是我的密码: public void startMoving() throws InterruptedException { moveEnemy("right",3); wait(); moveEnemy("down",3); wait(); moveEnemy("right",2); wait(); moveEnemy(

所以我的问题是,我需要这些方法一个接一个地运行,但我无法确定如何让这些方法在运行之前等待。 感谢您的帮助。非常感谢。 这是我的密码:

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();
public void startMoving()引发InterruptedException
{
移动敌人(“右”,3);
等待();
移动敌人(“向下”,3);
等待();
移动敌人(“右”,2);
等待();
移动敌人(“向上”,1);
等待();
移动敌人(“右”,2);
等待();
移动敌人(“向上”,2);
等待();
移动敌人(“右”,2);
等待();
移动敌人(“向下”,4);
等待();
移动敌人(“左”,1);
等待();
移动敌人(“向下”,2);
等待();
移动敌人(“右”,3);
等待();
移动敌人(“向上”,2);
等待();
移动敌人(“右”,1);
等待();
移动敌人(“向上”,1);
等待();
移动敌人(“右”,3);
}
公共无效移动(最终字符串方向,最终整数)
{
Thread moveThread=新线程(new Runnable()
{
公开募捐
{
isMoving=真;
int originalX=getX();
int originalY=getY();

对于(int-loop=0;loop,您可以使用
Thread.sleep(timein毫秒)
暂停当前正在执行的线程。如果这是用于更新UI的同一线程,则UI将在睡眠期间冻结,因此最好将所有UI内容保留在自己的线程上。

最简单的解决方案可能是不使用线程,但我怀疑这是您想要的

您可能正在寻找锁的概念:

方法可以通过调用以下命令获取与对象关联的锁:

synchronized(nameOfTheLockObject) {
    //do some code here
}
这将获取给定对象的锁,执行代码,然后释放锁。如果锁已被另一个方法/线程获取,则代码将暂停,直到锁被另一个方法/线程释放

还可以将synchronized语句添加到类的方法中,使它们获取父对象的锁

有关这方面的更多信息,请访问:

可能是Thread.sleep(),我假设他想等待一段时间不要睡觉或等待UI线程…那么不要使用线程。最好在继续之前让单独的线程检查条件是否满足。基本上是“签入”使用您的控制器,查看它们是否应该继续或循环,直到给出“确定”。除了测试/丢弃代码之外,我将避免在所有代码中使用
Thread.sleep()
Thread.sleep()
有各种各样的问题,包括不精确。如果需要精确触发方法,可能值得检查
ScheduledExecutorService
和/或
Quartz
库。为什么要使用
Thread
s?是否要将操作按顺序保留在EDT之外?然后需要一个
Thread
,而不是像现在这样每个操作一个。最好不要再使用
Thread.sleep()
。它很旧,并且已经用更好的线程抽象层分层,例如
java.util.concurrent.
。线程应该“签入”使用控制器来确定流量。值得对您的解决方案进行一些演示。只要想想来这里的人,他们可能正在等待一个更“有力”的答案。