【问题标题】:java, need to pause program for 0.5 sec [closed]java,需要暂停程序0.5秒[关闭]
【发布时间】:2017-05-14 20:24:49
【问题描述】:

所以我正在制作“西蒙游戏”,我需要一个 java 代码来暂停程序 0.5 秒,以向用户显示他需要按下的按钮。

  greenButton.setBackground(Color.GREEN);
             //need to stop here
             press = true;

【问题讨论】:

  • Java Timer的可能重复
  • 您需要提供更多上下文 - 可能是一个简短的代码示例。一般来说,您可以只使用Thread.sleep(500);,但您提到按钮,如果您在 GUI 线程上等待,它将冻结应用程序。
  • 我的猜测是这是一个 Swing 程序,您尝试过线程睡眠并发现它不起作用。如果是这样,请使用 Swing Timer,但为什么要让我们猜测呢??
  • 是的,你是对的,我尝试使用它,但它不起作用。如何使用“摇摆计时器”?

标签: java pause


【解决方案1】:
Thread.sleep(500);

欲了解更多信息,请参阅this

【讨论】:

    【解决方案2】:

    您可以使用 Thread.sleep(500) 等待 0.5 秒.....然后在另一个线程中向用户显示按钮.....或者您可以设置一个 volatile 布尔标志,该标志在您启动时被激活向用户显示他需要单击的按钮....并暂停所有其他线程....一旦用户单击该按钮,应取消设置标志并通知所有其他线程。

    【讨论】:

    • 查看最新更新...如果您设置等待通知机制会很好...等待 500 毫秒,直到用户单击按钮...单击通知等待线程继续重新开始运行。
    【解决方案3】:

    因为这看起来像是 Swing,所以使用 Swing Timer 暂停而不冻结程序。

    int delayTime = 500; // for 500 msecs
    new Timer(delayTime, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // TODO: code to be delayed goes here
    
            // stop the timer from repeating
            ((Timer) e.getSource()).stop();
        }
    }).start();
    

    【讨论】:

      【解决方案4】:

      您可以使用 CountDownLatch API https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

      例如。在第一个线程中,创建一个计数器为 1 的闩锁并将其传递给处理 UI 的第二个线程。然后在第一个线程中,在闩上调用 await()。这将导致第一个线程等待计数变为零。 同时,在第二个线程中,您可以处理他的 UI 事件,并且您可以在那里执行latch.countDown()。一旦计数变为零,线程 1 将再次变为活动状态。 您还可以在线程一中提供超时。如果发生超时,线程一将退出等待并恢复处理。

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 2014-07-07
        • 2017-10-27
        • 1970-01-01
        • 2016-07-30
        • 2010-10-01
        • 1970-01-01
        相关资源
        最近更新 更多