Java 时间线不';t与';一些';持续时间

Java 时间线不';t与';一些';持续时间,java,javafx,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"); }

我有这个工作代码:

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();
它不工作了!我是疯了还是完全崩溃了?如何解决这个问题

编辑:我知道这个bug看起来毫无意义,但它就发生在我面前。我提供了复制它的最低代码

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();
    }
}
导入javafx.animation.*;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.util.Duration;
导入javafx.stage.stage;
公共类Ticker扩展应用程序{
私人时间线录像;
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公共作废开始(最终阶段初级阶段){
持续时间=持续时间毫秒(1000/30.0);
videoTick=新的时间线(新的关键帧(持续时间,新的EventHandler)(){
公共无效句柄(ActionEvent ActionEvent){
系统输出打印项次(“勾选”);
}
}));
videoTick.setCycleCount(Animation.unfinite);
videoTick.playFromStart();
}
}
然后将
30.0
更改为
30.1

编辑2: 好的,这里有一个(部分)解决方法:
Timeline#play()
Timeline#playFromStart()
不起作用时起作用。(EDIT 4:对不起,这不起作用。显然我太累了。)

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

编辑3


我在OSX 10.8+Java/JavaFX1.7.0_17和Java/JavaFX1.7.0_21上复制了它

这是Java7中JavaFX的一个bug。我在JavaFX问题跟踪器中创建了跟踪此问题的工具

在从命令行编译和运行时,我能够使用Java1.7.0Øu21和OSX10.8重现这个(无刻度输出)

很抱歉之前的mis报告说它在Java1.7.0Ø21中工作(我在IDE中切换Java版本时出现了一个设置错误)

在Java 8中修复

它在Java8b92中确实起作用(滴答声是输出的),因此该错误在以后的JavaFX构建中似乎已经修复。因此,作为一种变通方法,您可以使用Java8

替代实施

<>对于这些经常发生的动画,你也可以考虑使用一个代替。

更新


,我为跟踪此问题而创建的问题跟踪记录在8.0中被关闭为已修复,其注释为“只有关键的修复程序被后传到2.2,因此将此关闭为已修复”。

有什么不起作用?是否引发异常或错误?在前面的代码中,Java打印“tick”、“tick”、“tick”。。。在后一个例子中,我使用的是7b17。让我升级并测试它。我可以用Java7U15在Windows7上复制这个,但我不确定错误的原因。假定的
#play()
修复程序也不起作用。在Java/JavaFx 1.7.0_21、OSX 10.8中仍然不起作用。尽管我同意这很可能是一个bug,但我对没有确凿证据证明它确实是一个bug的错误说法感到厌倦。在我看来,引用内部代码或以前的bug报告就足以声明bug的有效性。这很好,Vulcan,它不需要投票。在这方面没有办法引用内部代码,因为相关代码只是针对Java8的开源代码。许多关于封闭源代码的bug报告不是公开的,因此无法引用。我在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();
    }
}