2016-12-30 105 views
-8

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

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

可能的[Java Timer]重复(http://stackoverflow.com/questions/1041675/java-timer) – SOFe

+6

您需要提供更多的上下文 - 可能是一个简短的代码示例。一般来说,你可以使用'Thread.sleep(500);',但是你提到按钮,如果你在GUI线程上等待,它会冻结应用程序。 – assylias

+0

我的猜测是,这是一个Swing程序,你已经尝试了线程睡眠,发现它不起作用。如果是这样,请使用Swing Timer,但为什么让我们猜测? –

回答

1
Thread.sleep(500); 

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

1

你可以使用了Thread.sleep(500)等待0.5秒.....而在另一个线程显示的按钮给用户。 ....或者你可以设置一个易变的布尔标志,当你向用户显示他需要点击的按钮时,它会被激活,并且暂停所有其他线程....一旦用户点击按钮上的标志应该取消设置,并且应该通知所有其他线程。

+0

看到您的最新更新......如果您设置了等待通知机制......等待500毫秒并且直到用户单击按钮......点击通知等待的线程继续再次开始运行,这将是一件好事。 – prashant

0

由于这看起来是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(); 
0

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

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