如何延迟一个方法



我正在做一个奥赛罗游戏,我做了一个Ai,这是一个简单的代码。但是当我运行我的代码时,Ai在我点击后运行,我想要一些延迟,我真的不知道该怎么做,正如我所说,它运行得太快了,我想让Ai在2秒后运行。

board.artificialIntelligence();

我的方法Ai是存储在板类,我想在我的面板类,顺便说一句,我使用NetBeans。

如果你使用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);
    }
}

希望这对你有帮助。欢呼。

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

Timer timer = new Timer(2000, new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
         board.artificialIntelligence();
      }
   });
timer.setRepeats(false);
timer.start();
int numberOfMillisecondsInTheFuture = 2000;
    Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
    timer = new Timer();
    timer.schedule(new TimerTask() {
        public void run() {
                     board.artificialIntelligence();
        }
    }, timeToRun);

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

线程。休眠导致当前线程暂停执行指定的时期。

在你的例子中:

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

在代码调用之前

try {    
    Thread.sleep(2000);
} catch(InterruptedException e) {}

使用下面的代码等待2秒:

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

如果你不想让主线程阻塞,启动一个等待2秒然后调用(然后死亡)的新线程,像这样:

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

相关内容

  • 没有找到相关文章

最新更新