java, нужно приостановить программу на 0,5 секунды

поэтому я делаю «игру Саймона», и мне нужен java-код, чтобы приостановить программу на 0,5 секунды, чтобы показать пользователю кнопки, которые ему нужно нажимать.

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

person CrazyCat    schedule 30.12.2016    source источник
comment
Возможный дубликат таймера Java   -  person SOFe    schedule 30.12.2016
comment
Вам нужно предоставить больше контекста - возможно, короткий пример кода. В общем, вы можете просто использовать Thread.sleep(500);, но вы упомянули кнопки, и если вы подождете в потоке графического интерфейса, приложение зависнет.   -  person assylias    schedule 30.12.2016
comment
Я предполагаю, что это Swing-программа, и вы пытались заснуть потоком и обнаружили, что она не работает. если да, используйте Swing Timer, но зачем заставлять нас гадать??   -  person DontKnowMuchBut Getting Better    schedule 30.12.2016
comment
да, вы правы, я пытался использовать его, и он не работает. как использовать Swing Timer?   -  person CrazyCat    schedule 31.12.2016


Ответы (4)


Thread.sleep(500);

Дополнительную информацию см. в этом

person leeyuiwah    schedule 30.12.2016

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

person prashant    schedule 30.12.2016
comment
Увидев ваше последнее обновление... было бы хорошо, если бы вы настроили механизм уведомления об ожидании... ожидание 500 миллисекунд и пока пользователь не нажмет кнопку... щелчок, уведомляющий ожидающий поток о продолжении запуска снова. - person prashant; 30.12.2016

Поскольку это похоже на 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();
person DontKnowMuchBut Getting Better    schedule 30.12.2016

Вы можете использовать API CountDownLatch https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

Например. В первом потоке создайте защелку со счетчиком равным 1 и передайте ее второму потоку, который обрабатывает пользовательский интерфейс. Затем в первом потоке вызовите await() для защелки. Это заставит первый поток ждать, пока счетчик не станет равным нулю. Параллельно во втором потоке вы можете обрабатывать событие пользовательского интерфейса, и там вы можете сделать latch.countDown(). Как только счетчик обнулится, поток 1 снова станет активным. Вы также можете указать тайм-аут в первом потоке. Thread One выйдет из ожидания и возобновит обработку, если время ожидания истекло.

person Vikram Rawat    schedule 30.12.2016