假設我們有一個無限循環,我們想讓它睡一會兒,然後重新開始。我們沒有設定的時間,而是在按下某個鍵時恢復它。停止並恢復鍵輸入的無限循環
例如,在Java中,我們可以有:
while(true){
doSomething();
}
現在,我們這次可以阻斷,在許多方面。我們希望中斷它在一個按鍵,所以我們將有:
boolean running = true;
...
this.addKeyListener(this);
...
@override
public void keyPressed(KeyEvent e){
running = false;
}
,然後運行一個方法(假設run
),其中包含:
while(running){
doSomething();
}
但是,我們很樂意滿足一個問題:恢復。
因此,我們採取keyPressed
方法,並改變它的身體:
running = !running;
if(running){
run();
}
只有一個問題就在這裏:直到run
方法完成的KeyListener什麼都不會做。我已經使用線程,在那裏我們將不得不嘗試:
private class Runner implements Runnable {
@Override
public void run() {
while (running) {
doSomething();
}
}
}
和keyPressed
:
if(running){
runner.wait();
}else{
runner.notify();
runner.run();
}
running = !running;
但在我的實際代碼的doSomething
方法是不能被中斷(因爲它處理代碼輸出到屏幕上),所以thread.wait()
永遠不會被調用(它會一直拋出異常,而不是實際等待)。
那麼,總結一下:如何使用Java中的鍵輸入來停止和恢復循環的東西?
你能告訴我們你試圖用線程? – Charlie 2014-12-06 19:42:36
@Charlie我更新了帖子以包含該信息 – Wysaard 2014-12-06 20:06:41
您應該在keyPressed中嘗試'runner.start()',這會形成一個平行線程,讓您的原始線程繼續 – Charlie 2014-12-06 20:08:39