JavaFX中的计时器更新标签(绑定)

詹斯

我想在我的应用程序中添加一个时钟,以告诉您执行任务已有多长时间了。为简化起见,我在新线程中添加了一个每秒递增的计数器,并使用该计数器号更新标签“ setTimer”。为此,我在.fxml文件中有一个标签fx:id =“ setTimer”并将其导入到我的班级中。

 @FXML
    private Label setTimer;

并在我的类中创建了另一个类,该类扩展了线程TimerTask并在每次调用时将计数器加一。创建了一个新的对象“文本”,应始终使用计数器的当前值对其进行更新。

    SimpleStringProperty text = new SimpleStringProperty("undefined");
public class MyTask extends TimerTask {
        @Override
        public void run() {
            counter++;
            text.set(Integer.toString(counter));
        }
    }

为了使此类每秒被调用一次,我在initialize方法中创建了一个计时器,并将其设置为一秒钟。

@Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        MyTask myTask = new MyTask();
        Timer timer = new Timer(true);
        timer.scheduleAtFixedRate(myTask, 0 , 1000);
        setTimer.textProperty().bind(text);
    }

目前,我得到一个异常“不在FX应用程序线程上;currentThread = Timer-0'。

我已经尝试了多种方法来解决我的问题,但是我还没有到达正确的地步。我对我想做什么的想法应该很清楚,如果有人可以帮助我,我会很高兴。我的问题是在GUI中更新计数器的更改。不必以我认为的方式解决它,只需要提示如何最好地实现它即可。

谢谢

雅各布·廷霍弗

好的,我的评论太长了。这就是我会尝试这样做的方式。

  1. 在正在加载的应用程序上启动秒表
  2. 创建一个新线程,该线程每隔一段时间就会启动一次。
  3. 在秒表里面,以秒为单位从秒表获取时间(sw.getTime(TimeUntis.seconds))。如果您希望将其转换为小时和分钟,请参见本SO帖子
  4. 然后,使用以下命令将时间写入用户界面 Platform.runLater(new Runnable(){ /* access ui element and write time here */ });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章