2016-11-28 71 views
0

如何在執行方法時暫停。在執行Java中的方法時暫停x秒

private void myMethod() { 
    // some lines of code 
    this.player.activateEffect(true); 
    // pause for 5 seconds 
    this.player.activateEffect(false); 
} 

我希望該方法將激活5秒的方法稱爲activeEfect。

+0

如果這是一個線性控制檯程序或線程不是問題,'Thread.sleep' * *可以工作。但是,如果此代碼是事件驅動GUI的一部分,如Swing或JavaFX程序,那麼可以很容易地凍結整個程序,通過使用Thread.sleep來使其無響應,而不必關心其調用哪個線程。您可能想要提供有關程序結構的更多信息。 –

+0

檢查了這個http://stackoverflow.com/a/24104427/6689101 – zombie

回答

1

下面是代碼睡眠:

try { 
    Thread.sleep(5000L); 
} catch(InterruptedException ie) { 
} 
+3

Thread.sleep將阻止線程,如果它在UI線程上運行,那麼應用程序將凍結 – zombie

+0

作品在我的情況下,非常感謝。 – t4dohx

+0

有沒有人知道爲什麼程序「凍結」了一段時間從另一種方法調用?如果我直接從實例接口調用方法,它不會凍結並且工作正常。 – t4dohx

0

最好的辦法是進行在myMethod的你的行動()然後調用其他方法,大概一個Runnable 5秒後。

private void myMethod() { 
    // some lines of code 
    this.player.activateEffect(true); 

    // run afterDelay in 5 seconds 
    postDelayed(afterDelay, 5000); 
} 

private Runnable afterDelay = new Runnable() { 
    @Override 
    public void run() { 
     player.activateEffect(false); 
    } 
}; 

此代碼來自我自己的Android Java經驗,但我認爲這種技術是可移植的。

+0

不,我認爲這個例子僅適用於Android,因爲它看起來是Android特定處理程序類的一部分。 –

1

在狀態改變方法中等待的整個想法是有缺陷的。等待延遲整個線程,阻止任何工作完成。

如果碰巧是UI控制線程,應用程序會凍結。

你真正想要做的是給「效果」一個超時值,並且每個(遊戲)「打勾」檢查超時是否已經過期,並在過期時將其刪除。