2016-12-30 83 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將退出等待並恢復處理。