当前位置: 首页 > 知识库问答 >
问题:

添加计时器到我的程序(javafx)[复制]

呼延明朗
2023-03-14

我试图添加一个计时器到我的程序。我试图呼吁java.util.计时器,但它使我感到沮丧,因为我不完全理解它背后的概念。我刚刚用python完成了一个学期的编码,但这对我来说是一个完全不同的水平。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class main extends Application implements EventHandler<ActionEvent>{

    Button button;
    Button button2;
    Counter counter = new Counter(0);
    Counter timecounter = new Counter(0);
    Text text_counter = new Text(counter.S_count.get());
    Text text_timecounter = new Text(timecounter.S_count.get());

    Date currdate = new Date();
    int currsec = currdate.getSeconds();


    public static void main(String[] args) {
        launch(args);


    }


    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Counter Window");

        button = new Button();
        button2 = new Button();
        button.setText("Reset");
        button.setOnAction(this);
        button2.setText("Tick");
        button2.setOnAction(this);
        button.setTranslateY(-120);
        button2.setTranslateY(-80);
        text_counter.textProperty().bind(counter.S_count);
        text_timecounter.textProperty().bind(timecounter.S_count);
        text_timecounter.setTranslateX(-100);



        StackPane layout = new StackPane();
        layout.getChildren().add(button);
        layout.getChildren().add(button2);
        layout.getChildren().add(text_counter);
        layout.getChildren().add(text_timecounter);

        Scene scene = new Scene(layout, 360,280);
        primaryStage.setScene(scene);

        primaryStage.show();
    }

    @Override
    public void handle(ActionEvent event) {
        if(event.getSource()==button){
            counter.Reset();
        }
        if(event.getSource()==button2){
            counter.Tick();
        }
    }
}

我用python构建了一个主循环程序。我在想一种“肮脏”的方法,在循环中添加一个检查,检查当前日期的秒数是否发生了变化,如果发生了变化,将值增加一个。

class timerclass {
    Timer timer1;
    private int timecounter = 0;

    TimerTask Task1 = new TimerTask() {
        @Override
        public void run() {
            setTimecounter(getTimecounter()+1);
        }
    };

    public timerclass(){
        timer1 = new Timer();

    }

    public int getTimecounter() {
        return timecounter;
    }

    public void setTimecounter(int timecounter) {
        this.timecounter = timecounter;
    }
}

这就是我创造新计时器的进展。我明白我必须创建一个任务并将其调度到计时器,但我一点也不知道如何...

我该怎么做呢?抱歉给您带来不便。

共有1个答案

叶国兴
2023-03-14

定时器用于安排任务。。那么你在哪里写这些任务呢??你必须在TimerTask类中编写这些任务。。。

困惑的让我把它分解一下,

Timer timer = new Timer();

现在您已经创建了Timer类的对象...现在你必须做一些任务,对吗?因此,要做到这一点,请创建一个TimerWG的对象。

TimerTask task = new TimerTask()
{
        public void run()
        {
            //The task you want to do       
        }

};

现在,您已经创建了一个任务,您应该在其中定义要在run方法中执行的任务...

为什么我自己写了一个TimerTask类??这是因为TimerTask是一个抽象类,有三个方法。。所以你需要定义你想要使用的方法。。

现在安排任务

timer.schedule(task,5000l);

注意5000后面的“l”。它表示长数据类型,因为schedule方法定义为

void schedule(TimerTask任务,长毫秒)

供进一步参考

https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html

https://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html

 类似资料:
  • 我正在使用JavaFx和scene builder构建一个应用程序,但是除了添加Controller类之外,所有的工作都很好。 我得到以下错误: 主类 Gamescene1.fxml

  • 我试图显示一个计时器,它在点击开始按钮后计数并在标签中显示秒数,但我没有得到想要的输出。这是我的控制器代码和FXML文件。。。 这是我的FXML代码...

  • 问题内容: 我想先在Javafx中为我的图像添加计时器,例如,大约3秒钟显示我的第一张图像,然后大约5秒钟显示我的第二张图像,此后什么也没有显示。对此有什么想法吗? 问题答案: 使用更新的:

  • 我试图创建一个小行星游戏,但我已经在一开始就很挣扎了:我想在游戏开始前创建一个倒计时。为了做到这一点,我使用了一个计时器,当按下按钮“开始”时开始,它(应该)每秒钟加载一个,然后显示在一个上。 在我加上计时器之前,整个程序运行得很好。然而,图像仍在绘制中,的方法仍在完全使用。但是,图像不会出现在我的上。 有人能发现错误吗?我真的不明白问题是什么,虽然我对计时器不熟悉,所以如果我做的事情真的很愚蠢,

  • 我想在我的应用程序中添加带有,但一旦我将插件添加到我的应用程序中。yaml,我的应用程序不再运行。下面是错误 失败:生成失败,出现异常。 > 错误:任务执行失败:app:transformDexArchiveWithExternalLibsDexMergerForDebug'。 通用域名格式。Android建设者德兴。DexArchiveMergerException:合并dex存档时出错:/Us

  • 这是主要活动XML 这是片段活动XML 这是主活动Java文件 这是片段Java文件 我收到的logcat消息说: java.lang.RuntimeException:无法启动活动ComponentInfo{com.csdelta.haroon.fragmentpractice/com.csdelta.haroon.fragmentpractice.MainActivity}:android.v