我試圖執行下面的循環JavaFX的重複循環:當過渡結束
- 更新一些變量
- 玩基於過渡/代表變量
- 一旦過渡完成後,去到1
這會重演一次。我使它與以下工作:
//Step 3
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
doTheThing(); //Step 1, updates data
transition.setToValue(data);
transition.play(); // Step 2
}
});
transition.play(); //Triggers first repeat
當然,這是一個無盡的遞歸循環,這不是一個好主意。問題是,我無法弄清楚過渡完成後如何觸發重複。我已經使用循環嘗試:
while (1==1){
doTheThing();
transition.setToValue(data);
transition.play();
}
但是這不僅不等待過渡(可以預期的,而不是爲我一個問題),它並沒有起到過渡可言,並且程序沒有反應。我也試過這個:
transition.setOnFinished(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event){
ready = true;
}
});
while (1==1){
if (ready){
ready = false;
doTheThing();
transition.setToValue();
transition.play();
}
}
但它的行爲與解決方案#2相同。我寧願不用等待編程,但即使我做了,我也不確定如何在重複之前等待循環,而不會停止播放的轉換。
我能做些什麼呢?
我不認爲你的第一個版本創建無限遞歸。 'transition'必須封裝一些線程,所以'play'方法基本上在某個線程中調度線程的轉換,然後立即退出。由於它退出,因此您不保留堆棧上的方法調用。 (但@ eckig的解決方案是首選)。 –
這將意味着沒有堆棧溢出權?我離開它運行了一段時間,並想知道爲什麼它沒有中斷,我只是認爲它是輕量級的或什麼的。另外,如果這不會導致錯誤,那麼爲什麼@ eckig解決方案是首選? (不要懷疑它,只是想知道爲什麼) – Spekular
是的,這將意味着沒有stackoverflow。我更喜歡@ eckig的解決方案,因爲它更清楚發生了什麼。由於[documentation](http://docs.oracle.com/javase/8/javafx/api/javafx/animation/Animation.html#play--)明確指出'play()'是一個異步調用,所以I儘管如此,你認爲你的原始代碼是好的。 –