所以我的问题是我需要这些方法一个接一个地运行,但我无法弄清楚如何使方法在运行之前等待.任何帮助表示赞赏.谢谢.这是我的代码:
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();
Anedar.. 6
最简单的解决方案可能是不使用线程,但我怀疑这是你想要的.
您可能正在寻找的是锁的概念:
方法可以通过调用以下方式获取与对象关联的锁:
synchronized(nameOfTheLockObject) { //do some code here }
这将获取给定Object的锁定,执行代码并在之后释放锁定.如果锁已经被另一个方法/线程获取,则代码暂停,直到另一个方法/线程释放锁.
您还可以将synchronized语句添加到类的方法中,以使它们获取父对象的锁.
有关这方面的更多信息,请访问:http: //docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
最简单的解决方案可能是不使用线程,但我怀疑这是你想要的.
您可能正在寻找的是锁的概念:
方法可以通过调用以下方式获取与对象关联的锁:
synchronized(nameOfTheLockObject) { //do some code here }
这将获取给定Object的锁定,执行代码并在之后释放锁定.如果锁已经被另一个方法/线程获取,则代码暂停,直到另一个方法/线程释放锁.
您还可以将synchronized语句添加到类的方法中,以使它们获取父对象的锁.
有关这方面的更多信息,请访问:http: //docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html