首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Trident库和Thread.sleep()

Java Trident库和Thread.sleep()
EN

Stack Overflow用户
提问于 2012-05-13 04:30:56
回答 2查看 187关注 0票数 1

我正在用Java创建一个简单的棋盘游戏,使用的是Swing和一个AI,它应该在用户轮到他们之后才会轮到它。我想“暂停”游戏大约3秒,然后才允许AI轮换,这样用户就可以看到他们移动的结果。调用Thread.sleep(3000)也会暂停我使用三叉树动画库创建的动画。在三秒钟结束后,空格就变成了它们应该是的颜色,根本没有做动画。

如果有人能提供任何建议,请提出来。我知道我总是可以添加一个"Continue“按钮,用户可以在AI开始之前按下它,但我想避免这一步。

编辑:这是我的单人游戏面板。它扩展了GamePanel,这只是一个抽象类,它提供了一种根据当前板子更新图形用户界面的方法。它还扩展了JPanel。我想我只是有点不清楚在哪里/如何实现计时器来做我想要它做的事情,无论它是在这个类中还是在另一个类中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-13 04:39:33

假设您正在单独的线程中运行AI代码(您不希望在运行复杂的AI时锁定UI,对吧?),您希望暂停发生在AI线程中,而不是UI线程中。在这里添加您的Thread.sleep()。

如果你目前没有为AI使用单独的线程,这听起来并没有你想要的那么“简单”,可以看看使用Futures and Callables,这是一种执行后台操作和链接事件的好方法,当它们完成时发生。

票数 1
EN

Stack Overflow用户

发布于 2012-05-13 04:31:56

切勿在Swing事件线程或EDT上调用Thread.sleep(),因为这会占用该线程,阻止Swing执行任何图形操作或与用户交互。请改用Swing Timer。例如,

代码语言:javascript
复制
  int delay = 3000;
  new Timer(delay , new ActionListener() {

     @Override
     public void actionPerformed(ActionEvent e) {
        // tell AI to do its thing
        ((Timer)e.getSource()).stop();
     }
  }).start();

有关Swing事件分派线程或EDT的更多信息,请阅读:Concurrency in Swing

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10567178

复制
相关文章

相似问题

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