【问题标题】:How to make code run once inside background task looping?如何让代码在后台任务循环中运行一次?
【发布时间】:2019-03-06 09:58:23
【问题描述】:

我有一个后台任务循环看起来像这样:

Timeline fiveSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(1), event -> {
     if (hourNow >= cashCutOff_Start && hourNow <= cashCutOff_End - 1) {
//Run the code once
}
}));
fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
fiveSecondsWonder.play();

此代码确实每隔一秒循环一次。但是,一旦此代码运行,我想使一行代码可执行。

【问题讨论】:

  • 要么创建 2 个单独的 Timeline,要么使用布尔变量在内部进行测试,以了解这部分代码是否已经运行
  • 与您的问题无关:请学习 java 命名约定并遵守它们。相关:目前还不清楚您的目标是什么 - 请提供 minimal reproducible example 来说明问题以及它如何不符合您的要求。
  • @kleopatra 他在哪里不遵循命名约定?
  • 下划线应该是驼峰式
  • 呵呵,这个变量名看起来很眼熟:stackoverflow.com/questions/9966136/…:D

标签: java javafx javafx-8 javafx-2


【解决方案1】:

只需删除fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);

【讨论】:

    【解决方案2】:

    分两步的简单解决方案。

    创建一个布尔变量:

    private boolean hasRun = false;
    

    在时间轴中添加 if 语句:

    Timeline fiveSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(1), event -> {
        //check if code has run before
        if(!hasRun){
            //this will run only once
            //by setting hasRun = true;
            hasRun=true;
            //add your code here...
        }
        //this code will run in every KeyFrame
        //add your code here...
        }));
        fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
        fiveSecondsWonder.play();
    

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 1970-01-01
      • 2021-07-31
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多