私はこの作業コードを持っています:
Duration duration = Duration.millis(1000 / 30.0);
videoTick = new Timeline(new KeyFrame(duration, new EventHandler<ActionEvent>() {
public void handle(ActionEvent actionEvent) {
System.out.println("tick");
}
}));
videoTick.setCycleCount(Animation.INDEFINITE);
videoTick.playFromStart();
完璧に。しかし、デュレーションを少し変更すると、次のようになります。
Duration duration = Duration.millis(1000 / 30.1);
それはもううまくいきません!私は気が狂っていますか、それとも JavaFx は完全に壊れていますか? それを回避する方法は?
編集:このバグはまったく意味がないように見えますが、目の前で起こっただけです。再現するための最小限のコードを提供しました。
import javafx.animation.*;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.util.Duration;
import javafx.stage.Stage;
public class Ticker extends Application {
private Timeline videoTick;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(final Stage primaryStage) {
Duration duration = Duration.millis(1000 / 30.0);
videoTick = new Timeline(new KeyFrame(duration, new EventHandler<ActionEvent>() {
public void handle(ActionEvent actionEvent) {
System.out.println("Tick");
}
}));
videoTick.setCycleCount(Animation.INDEFINITE);
videoTick.playFromStart();
}
}
次に、 を に変更30.0
し30.1
ます。
編集 2 :
わかりました、ここに (部分的な) 回避策があります:(編集 4 : 申し訳ありませんが、これは機能しません。明らかに疲れすぎています。)Timeline#play()
機能Timeline#playFromStart()
しない場合に機能します。
しかし、問題は解決していません。本当に必要な場合はどうすればよいplayFromStart
でしょうか? さらに重要なのは、なぜそれが機能しないの1000/30.1
ですか?
編集3:
OSX 10.8 + Java/JavaFx 1.7.0_17 と Java/JavaFx 1.7.0_21 で再現しました。