2016-12-30 14 views
-8

поэтому я делаю «игру Simon», и мне нужен код 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);', но вы упоминаете кнопки, и если вы ждете в потоке графического интерфейса, это заморозит приложение. – assylias

+0

Я предполагаю, что это программа Swing, и вы попробовали спящий поток и обнаружили, что он не работает. если да, используйте таймер Swing, но почему нас устраивает? –

ответ

1
Thread.sleep(500); 

Для получения дополнительной информации см this

1

Вы можете использовать Thread.sleep (500) ждать в течение 0,5 секунд ..... и в другом потоке отображения кнопок для пользователя. .... Или вы можете установить volatile boolean флаг, который активируется, когда вы показываете пользователю кнопку, которую ему нужно нажать на ... и которая приостанавливает весь другой поток .... как только пользователь нажимает на кнопку флаг должен быть отменен, и все другие потоки должны быть уведомлены.

+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 и передайте его во второй поток, который обрабатывает пользовательский интерфейс. Затем в первом потоке вызовите wait() на защелку. Это заставит первый поток ждать, пока счетчик станет нулевым. Параллельно во втором потоке вы можете обрабатывать его UI-событие, и там вы можете сделать latch.countDown(). Как только счетчик достигнет нуля, поток 1 снова станет активным. Вы также можете указать тайм-аут в потоке один. Thread One выйдет из процесса ожидания и возобновления, если произойдет тайм-аут.