我有这个工作代码:
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 上复制了它。