将计时器添加到我的程序(javafx)
我正在尝试为我的程序添加计时器。我尝试调用java.util.Timer,但它让我很沮丧,因为我不完全理解它背后的概念。我刚刚用python编写了一学期的代码,但这对我来说是一个完全不同的水平将计时器添加到我的程序(javafx),java,javafx,timer,counter,Java,Javafx,Timer,Counter,我正在尝试为我的程序添加计时器。我尝试调用java.util.Timer,但它让我很沮丧,因为我不完全理解它背后的概念。我刚刚用python编写了一学期的代码,但这对我来说是一个完全不同的水平 import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.
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();
}
}
}
这就是我在创建新计时器方面取得的进展。我知道我必须创建一个任务并将其安排到计时器上,但我一点也不知道如何
我该怎么办?很抱歉出现这种不方便。
计时器用于安排任务。。那么你在哪里写这些任务??您必须在TimerTask
类中编写这些任务
困惑?让我把它分解一下
Timer timer = new Timer();
现在您已经创建了Timer类的对象。。
现在你必须做一些工作,对吗?为此,创建一个TimerTask
对象
TimerTask task = new TimerTask()
{
public void run()
{
//The task you want to do
}
};
现在您已经创建了一个任务,您应该在其中定义要在run方法中执行的任务
为什么我自己写了一个TimerTask类??
这是因为TimerTask是一个具有三个方法的抽象类。。
因此,您需要定义要使用的方法
现在安排任务
timer.schedule(task,5000l);
注意5000后面的“l”。表示长数据类型,因为计划
方法定义为
void计划(TimerTask任务,长毫秒)
供进一步参考
您不需要计时器,可以使用计时器。Tomas的博客(忽略其中的ReactFX内容)。你不应该将awt类导入JavaFX应用程序。你应该提供一个(完整的代码,通过复制和粘贴进行编译)。你不应该“向循环添加检查”,因为这可能会冻结你的应用程序或不必要地消耗CPU周期。遵循你的代码。你就是那个人,伙计!谢谢你帮我。我学习6个月就要成为一名程序员了,正是像你这样的人帮助我掌握了这些东西。谢谢如果使用计时器,请确保使用完成可能影响活动场景图的任何修改,否则可能会得到不可预测的结果。。是的,@jewelsea声明,如果您对任何节点进行更新,您必须调用此方法。。任何与JavaFX接口相关的东西(节点、场景等)@Dennis Lukas很乐意帮助..!!:)很好的解释+效果很好。
timer.schedule(task,5000l);