首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何延迟一个方法

如何延迟一个方法
EN

Stack Overflow用户
提问于 2013-04-10 21:52:42
回答 8查看 2.6K关注 0票数 1

我正在做一个奥赛罗游戏,我已经做了一个人工智能,这是一个简单的代码。但是当我运行我的代码时,Ai在我点击后立即运行,我希望延迟一些时间,我真的不知道该怎么做,就像我说的,它运行得太快了,我想让Ai在2秒后运行。

代码语言:javascript
复制
board.artificialIntelligence();

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

EN

回答 8

Stack Overflow用户

发布于 2013-04-10 22:04:25

如果你使用Thread.sleep(TIME_IN_MILLIS),你的游戏将在2秒内变得无响应(除非这段代码在另一个线程中运行)。

我所能看到的最好的方法是在你的类中有一个ScheduledExecutorService,并将AI任务提交给它。类似于:

代码语言:javascript
复制
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);
    }
}

希望这能有所帮助。干杯。

票数 5
EN

Stack Overflow用户

发布于 2013-04-10 21:54:16

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

代码语言:javascript
复制
Timer timer = new Timer(2000, new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
         board.artificialIntelligence();
      }
   });
timer.setRepeats(false);
timer.start();
票数 4
EN

Stack Overflow用户

发布于 2013-04-10 22:01:49

代码语言:javascript
复制
int numberOfMillisecondsInTheFuture = 2000;
    Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
    timer = new Timer();
    timer.schedule(new TimerTask() {
        public void run() {
                     board.artificialIntelligence();
        }
    }, timeToRun);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15927820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档