gpt4 book ai didi

JavaFx如何每1小时检查一次时间

转载 作者:行者123 更新时间:2023-12-02 06:47:25 27 4
gpt4 key购买 nike

我正在尝试编写一个简单的JavaFx程序,该程序假设检查时间并每个整小时执行一些操作(首先仅更改标签中的文本)。但我在不断检查时间方面遇到了问题。我正在使用日历类。如果我编写 while(true) 循环,程序将启动但不执行任何操作。我应该使用线程吗?我知道这可能是一个微不足道的问题,但我无法弄清楚,我在这方面是新手;p

谢谢大家的帮助(我不知道我是否应该在下面回复或编辑这篇文章)。我设法创建了自己的版本,这是我根据您给我的链接创建的。

public class Trening extends Application {
@Override
public void start(Stage primaryStage) {
Task<Integer> task = new Task<Integer>() {
@Override
protected Integer call() throws Exception {
Calendar tajm = Calendar.getInstance();
int hour = tajm.get(Calendar.HOUR_OF_DAY);
int minutes = 0;
updateMessage(Integer.toString(hour));
while (true) {
try {
minutes = 60 - tajm.get(Calendar.MINUTE);
Thread.sleep(minutes * 60000);
if (tajm.get(Calendar.HOUR_OF_DAY) != hour) {
hour = tajm.get(Calendar.HOUR_OF_DAY);
updateMessage(Integer.toString(hour));

} else {

}
} catch (InterruptedException ie) {
//System.err.print("...");
}
}
}
};

Label btn = new Label();
btn.textProperty().bind(task.messageProperty());
new Thread(task).start();

StackPane root = new StackPane();
root.getChildren().add(btn);

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("...");
primaryStage.setScene(scene);
primaryStage.show();
}

/**
* The main() method is ignored in correctly deployed JavaFX application.
* main() serves only as fallback in case the application can not be
* launched through deployment artifacts, e.g., in IDEs with limited FX
* support. NetBeans ignores main().
*
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}}

就像我说的,我对编程相当陌生,所以我很感激每一条建议。非常感谢您的帮助,如果您对我所写的内容有任何更多建议,我不介意;p

抱歉,我没有将您的答案标记为有用,但我的声誉太低了......

最佳答案

这是一种方法。

首先,封装您的定期任务。

public static class MyPeriodicTask implements Runnable {

public void run() {
boolean fullHour = ... // determine somehow
if (fullHour) {
Platform.runLater(new Runnable() {

public void run() {
// Modify label here
}
});
}
}
}

请注意 Platform.runLater() 调用,通过 Runnable 的此保证将由 JavaFX 应用程序线程执行,您可以在其中安全地与 GUI 交互。

然后使用 ExecutorService 定期运行您的任务

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
executorService.scheduleAtFixedRate(new MyPeriodicTask(), 1, 1, TimeUnit.MINUTES);

这将每分钟运行您的任务(在初始延迟 1 分钟后)。

但是如果您认真对待 JavaFX,那么我认为您应该阅读 Concurrency in JavaFX至少。

关于JavaFx如何每1小时检查一次时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470565/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com