【发布时间】:2014-01-14 21:58:47
【问题描述】:
所以我的问题是我需要这些方法一个接一个地运行,但我不知道如何让这些方法在运行前等待。 任何帮助表示赞赏。谢谢你。 这是我的代码:
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();
【问题讨论】:
-
可能是Thread.sleep(),我假设他想等待一段时间
-
不要在 UI 线程上休眠或等待...
-
那么不要使用线程。
-
在继续之前,最好先满足您的单独线程检查条件。基本上与您的控制器“签入”,看看他们是否应该继续或循环直到确定。除了测试/丢弃代码之外,我会避免使用
Thread.sleep()。Thread.sleep()有各种问题,包括不精确。如果您需要精确触发方法,可能值得查看ScheduledExecutorService和/或Quartz库。 -
你为什么要使用
Threads?您是否要按顺序将操作排除在 EDT 之外?那么你需要一个Thread,而不是像现在这样每个操作一个。
标签: java methods jframe jbutton wait