如何延迟一个方法

时间:2013-04-10 13:52:42

标签: java netbeans

我正在做一个othello游戏,我做了一个简单的代码。但是当我运行我的代码时,Ai在我点击之后就运行了,我想要一些延迟,我真的不知道怎么做,正如我所说,它跑得快,我希望艾未未如此运行2秒。

board.artificialIntelligence();

我的方法Ai存储在棋盘类中,我希望它在我的面板类中,顺便说一句,我正在使用NetBeans。

8 个答案:

答案 0 :(得分:5)

如果您执行Thread.sleep(TIME_IN_MILLIS)游戏将在2秒内无响应(除非此代码在另一个线程中运行)。

我能看到的最好的方法是在你的课堂上有ScheduledExecutorService并将AI任务提交给它。类似的东西:

public class AI {

    private final ScheduledExecutorService execService;

    public AI() {
        this.execService = Executors.newSingleThreadScheduledExecutor();
    }

    public void startBackgroundIntelligence() {
        this.execService.schedule(new Runnable() {
            @Override
            public void run() {
                // YOUR AI CODE
            }
        }, 2, TimeUnit.SECONDS);
    }
}

希望这会有所帮助。欢呼声。

答案 1 :(得分:4)

如果你正在使用Swing,你可以使用Swing Timer在预定义的延迟后调用该方法

Timer timer = new Timer(2000, new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
         board.artificialIntelligence();
      }
   });
timer.setRepeats(false);
timer.start();

答案 2 :(得分:2)

int numberOfMillisecondsInTheFuture = 2000;
    Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
    timer = new Timer();
    timer.schedule(new TimerTask() {
        public void run() {
                     board.artificialIntelligence();
        }
    }, timeToRun);

答案 3 :(得分:0)

使用Thread.sleep(2000)等待两秒

答案 4 :(得分:0)

  

Thread.sleep导致当前线程暂停执行a   指定期限。

在你的情况下:

Thread.sleep(2000); // will wait for 2 seconds

答案 5 :(得分:0)

在您的代码致电之前

try {    
    Thread.sleep(2000);

} catch(InterruptedException e) {}

答案 6 :(得分:0)

使用此代码等待2秒钟:

long t0,t1;
t0=System.currentTimeMillis();
do{
   t1=System.currentTimeMillis();
}while (t1-t0<2000);

答案 7 :(得分:0)

如果您不希望主线程被阻塞,请启动一个等待2秒的新线程然后进行调用(然后死掉),如下所示:

new Thread(new Runnable() {
    public void run() {
        try {
            Thread.sleep(2000);
        } (catch InterruptedException e) {}
        board.artificialIntelligence();
    }
}).start();