【问题标题】:Timer (Clock) in JavaFX 1.8JavaFX 1.8 中的定时器(时钟)
【发布时间】:2019-12-01 14:36:27
【问题描述】:

我正在尝试在使用 JavaFX(IDE:NetBeans)和 OS(Win 10)开发的屏幕录制应用程序中添加一个计时器。我现在正在添加一个计时器,用作:

用户点击开始录制,我的应用程序上的标签应该开始将时间显示为 00:00:00,我有时间(以秒为单位),即使在控制台上打印,但是当我使用它显示在应用程序上时只显示 0 秒。我也附上代码。请帮忙。当我有值时如何刷新应用程序界面或运行计时器,它只是没有更新。

在这里你可以看到我的应用没有启动计时器;但是,正在打印在控制台App's SnapConsole Snap

    private void scheduleTimerTasks() {
        isRecording = true;
        int delay =50; 
        long period = 500;
                //1000 / 48;
        RecordTimer.reset();
        timerRecord = new Timer("Thread TimerRecord");
        timerCount = new Timer("Thread TimerCount");
        recorderTask = new ScreenRecorderTask(encoder, rectangle);
        countTask = new TimerCountTask(Timer);
        timerRecord.scheduleAtFixedRate(recorderTask, delay, period);
        timerCount.scheduleAtFixedRate(countTask, delay, period);
        Timer.setText(""+countTask.timeInSec+" s"); //Setting Label Text
        System.out.println(countTask.timeInSec);
        recordStateLabel.setText("recorder Started...");
    }

【问题讨论】:

  • -source 1.7 不支持 lambda 表达式(使用 -source 8 或更高版本来启用 lambda 表达式)得到了这个
  • 然后使用 Java 8?而不是 7...
  • 必填,否则,我会有
  • 好吧,像这样:Platform.runLater(new Runnable() { @Override public void run() { timer.setText(""+countTask.timeInSec+" s"); } });
  • 什么是平台?我需要导入一些东西还是什么?它仅在平台上给出错误。

标签: java javafx


【解决方案1】:

你可以使用javafx.animation.animationTimer中的AnimationTimer,这个定时器的handle'方法会在每一帧被调用。

【讨论】:

  • 它已经开始运行,但你能告诉我为什么它是实际时间的 2 倍吗?我在哪里可以设置它的 FPS 或其他什么?如果我录制 8 秒,则为 17 秒
  • @AtifAziz FPS 无关紧要。 AniamtionTimer#handle(long) 方法的单个参数是帧的时间戳(以纳秒为单位)。如果您跟踪前一个时间戳并将其从当前时间戳中减去,您将获得两帧之间经过的时间(以纳秒为单位)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 2016-03-09
  • 2023-03-18
  • 2012-05-19
  • 1970-01-01
相关资源
最近更新 更多