- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试什么:
我尝试为家庭锻炼建立一个倒数计时器,它以相同的间隔运行两次,然后给您额外的间隔休息时间。之后,它应该以 3 个间隔重新开始。
我走了多远?:
目前我成功地运行了从三十秒到零的第一个间隔。我的问题是,我无法确定 JavaFX 任务是否已完成。更准确地说,如果不创建几个自覆盖过程(例如使用 for 循环),我就无法重新开始。
代码和图形用户界面:
这是我的 Controller.class
用于处理我的 FXML 文件:
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.Slider;
public class Controller {
private int time;
@FXML
private Label counterLabel;
private static StringProperty displayTime = new SimpleStringProperty("30");
@FXML
private Button startstop;
@FXML
private ProgressIndicator progress;
private static DoubleProperty prog = new SimpleDoubleProperty(0.0);
@FXML
private Slider Pausendauer; // pause length
@FXML
private Slider Trainingsdauer; //interval length
@FXML
private Slider Repeats;
public void initialize() {
progress.setProgress(0);
counterLabel.textProperty().bind(displayTime);
progress.progressProperty().bind(prog);
}
public void click(ActionEvent e) throws InterruptedException {
//event for clicking start button
//Task for Counting (Should be repeatable after running through
time = (int)Trainingsdauer.getValue();
Task<String> count = new TaskTimer(time);
displayTime.bind(count.valueProperty());
prog.bind(count.progressProperty());
count.run();
}
}
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javafx.concurrent.Task;
public class TaskTimer extends Task<String>{
private int time;
double fraction;
double prog;
public static void main(String[] args) {
}
public TaskTimer(int sec) {
this.time = sec;
this.fraction = 1.0 / time; //claculating for closng circle
this.prog = 0.0;
}
protected String call() throws Exception {
// TODO Auto-generated method stub
//runs scheduled without delay
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable(){
public void run() {
time = time - 1; //Decrement of time
prog = prog + fraction; //increase progress
updateProgress(prog, 1);
if(time >= 10) { // Makes 01 from 1 and so on
updateValue(time+"");
}else {
updateValue("0"+time);
}
System.out.println(time+"");
if (time <= 0) {
updateProgress(1, 1);
scheduler.shutdown();
}
}
}, 1, 1, TimeUnit.SECONDS);
return time+"";
}
}
最佳答案
您可以使用 Task.setOnSucceeded构造和调用新的方法 Task
如下所示 mre :
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class RestartProgressIndicator extends Application {
private static int COUNT_DOWN = 10;
@Override
public void start(Stage stage) {
Work work = new Work();
Button button = new Button("Go");
button.setDefaultButton(true);
button.setOnAction(e -> {
work.work(COUNT_DOWN);
button.setDisable(true);
});
Pane root = new BorderPane(null,work.getPane(),null, button,null);
root.setPadding(new Insets(20.));
Scene scene = new Scene(root, Color.WHITE);
stage.setScene(scene);
stage.centerOnScreen();
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
class Work{
private TaskTimer count;
private final ProgressIndicator pi;
private final Pane pane;
private int counter = 0;
Work(){
pi = new ProgressIndicator();
pi.setMinWidth(150); pi.setMinHeight(150);
pane = new Pane(pi);
}
void work(int seconds){
count = new TaskTimer(seconds);
pi.progressProperty().bind(count.progressProperty());
count.setOnSucceeded(e->{
pi.progressProperty().unbind();
if(isRestarart()) {
work(seconds);
}
});
Thread th = new Thread(count);
th.setDaemon(true);
th.start();
}
private boolean isRestarart() {
// TODO apply restart logic
return ++counter < 3;
}
Pane getPane() {
return pane;
}
}
class TaskTimer extends Task<String>{
private final int seconds;
double fraction, prog;
public TaskTimer(int seconds) {
this.seconds = seconds;
fraction = 1.0 / seconds;
prog = 0.0;
}
@Override
protected String call() throws Exception {
int time = seconds;
while(true){
time = time - 1; //Decrement of time
prog = prog + fraction; //increase progress
updateProgress(prog, 1);
if(time >= 10) { // Makes 01 from 1 and so on
updateValue(time+"");
}else {
updateValue("0"+time);
}
TimeUnit.SECONDS.sleep(1);
if (time <= 0) {
updateProgress(1, 1);
break;
}
};
return time+"";
}
}
关于java - 再次完成后在 JavaFX 中运行相同的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62367514/
之前有人问过这个问题,但是当移动到具有相反字节序的平台(在这种情况下从大到小)时,我仍然对如何处理位域结构感到有些困惑。所以如果我有这个: typedef struct { unsigned
我之前问过这个问题here , 但它被标记为重复并已关闭。不幸的是,我被指出的答案不起作用.... 所以,再次: 我可以生成一个像这样的 eCharts4r 仪表 library(echarts4r)
关于 .NET 中对不可为空引用类型的支持存在很多问题。最大的希望是代码契约,但它仅限于对预算有限的人进行运行时检查。 对于代码契约以外的方法,Jon Skeet 写了一篇 blog post几年前,
当我通过将终止标志设置为true来停止线程'srch_slave_thread'时,(srch_slave_thread.terminate)释放线程的线程停止在析构函数的'inherited'行中,
We know that Windows 使用 CR + LF 对作为换行符,Unix(包括 Linux 和 OS X)使用单个 LF,而 MacOS 使用单个 CR。 这是否意味着 C 和 C++
This other SO question询问 WPF 中的自动完成文本框。有几个人已经构建了这些,其中给出的答案之一表明 this codeproject article . 但我还没有找到任何与
这个问题对我来说就像是噩梦的重演。该项目是使用 gpt3 训练聊天机器人,我正在试验嵌入。 我有文档,我正在尝试为不同的部分创建嵌入。根据我的测试,getEmbeddings() 似乎返回了一个值。但
我收到数据读取器初始化错误。我知道这个问题以前已经回答过很多次了,但这些案例似乎不适合我的情况。错误消息开头为“执行读取器:连接属性尚未初始化。” 程序: using System; using Sy
我知道这个问题已被多次询问和回答,但我正在抓狂,因为所提出的解决方案似乎都不起作用。 尽管有一个有效的配置文件,据我所知,它与 bundle 标识符匹配,但我收到了上述错误: 我已按照本网站上各种建议
所以我有一个小问题 这是我的文字 AFTER_2011/03/01 GREATER_2004_NOT 我想要 AFTER 和 GREATER,所以我有以下正则表达式: [A-Z]{2,}\\B 一开始
这个问题对我来说就像是噩梦的重演。该项目是使用 gpt3 训练聊天机器人,我正在试验嵌入。 我有文档,我正在尝试为不同的部分创建嵌入。根据我的测试,getEmbeddings() 似乎返回了一个值。但
我目前正在做具有图形功能的计算器应用程序。然后,我在我的计算器中有这个按钮,并将它连接到我的 Calculator2ViewController 上。此外,我将此按钮连接到另一个名为 GraphVie
昨天,我尝试以一种方式执行此操作...今天我尝试另一种方式,但仍然卡住了。我必须找到一种使用整数除法和取模来做到这一点的方法。这是我的代码,后面是错误消息。 public int evaluateFr
我大致正在处理以下内容: var i; var k = 5; $('document').ready(function () { $('#someElement').click(functio
又是realloc的问题。看来我在之前的很多realloc语句中都没有发现类似的问题。我将不胜感激您的兴趣。 我正在尝试读取格式的文本输入: g:;0,1,0,1,0 。我在源文本文件中有一组这种格式
我不知道为什么下面会给我:*“error LNK2001: unresolved external symbol 'struct Win32Vars_t win32' (?win32@@3UWin32
又是我。在我所有的问题中,我认为这是所有问题中最愚蠢的,但由于疲劳或愚蠢,我也需要一些帮助。然而,最重要的是,我这样做是为了我的一项任务,并且有一个严格的规则 - 我必须使用一个函数调用 char*
在 Ubuntu 14.04.5 上运行 MySql 5.5.53。当从文本文件导入数据时(加载数据 infil $FIL INTO TABLE &c),我收到可怕的提示,因为 secure_file
我在 Stackoverflow 中找到了大量关于如何选择组中第一行和最后一行的示例,但我无法根据需要调整它们。唉,我对 MySQL 的有限了解无济于事。 一些数据(date_time、val1 和
我遇到错误“连接必须有效并再次打开,当我更改我的 sql 查询代码时。任何人都可以帮忙吗??(编辑)在 form1 中我已经连接到数据库,在 form2 中我试图添加查询。 //IN Class1.c
我是一名优秀的程序员,十分优秀!