时间轴不适用于“某些”持续时间

时间:2013-06-08 21:28:01

标签: java javafx

我有这个工作代码:

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 好的,这是一个(部分)解决方法:当Timeline#play()没有时,Timeline#playFromStart()有效。编辑4 :抱歉,这不起作用。显然我太累了。)

但问题没有解决:如果你真的需要playFromStart怎么办?更重要的是,为什么它不适用于1000/30.1

编辑3

我在OSX 10.8 + Java / JavaFx 1.7.0_17和Java / JavaFx 1.7.0_21上重现了它。

1 个答案:

答案 0 :(得分:1)

Java 7 Bug

这是Java 7中JavaFX的一个错误。我在JavaFX问题跟踪器中创建了RT-31027来跟踪此问题。

在从命令行编译和运行时,我能够使用Java 1.7.0_21,OSX 10.8重现此(无滴答输出)。

很抱歉早先的错误报道它在Java 1.7.0_21中工作(我在IDE中使用java版本切换时出现了设置错误)。

已在Java 8中修复

它在Java8b92中确实有效(滴答输出),因此该漏洞似乎已在以后的JavaFX版本中得到修复。 Java 8 early access builds are available。因此,作为一种解决方法,您可以使用Java 8。

替代实施

对于经常发生的这类动画,您也可以考虑使用AnimationTimer代替。

<强>更新

RT-31027,我创建的用于跟踪此问题的跟踪记录已在8.0中修复,注释“只有关键修复程序被反向移植到2.2,因此将其关闭为固定”。

相关问题