gpt4 book ai didi

java - 如何正确退出 javaFX Platform.runLater

转载 作者:行者123 更新时间:2023-11-29 07:41:10 25 4
gpt4 key购买 nike

当我关闭应用程序时,下面的代码没有正确退出。我相信问题是我在哪里准确调用 system.exit 和 platform.exit....

hour_Label.textProperty().bind(hour);
minute_Label.textProperty().bind(minute);
second_Label.textProperty().bind(second);

new Thread(() ->
{
for (;;)
{
try
{
final SimpleDateFormat simpledate_hour = new SimpleDateFormat("h");
final SimpleDateFormat simpledate_minute = new SimpleDateFormat("mm");
final SimpleDateFormat simpledate_second = new SimpleDateFormat("s");
Platform.runLater(new Runnable() {
@Override public void run()
{
hour.set(simpledate_hour.format(new Date()));
minute.set(simpledate_minute.format(new Date()));
second.set(simpledate_second.format(new Date()));
}
});
Thread.sleep(200);
}
catch (Exception e){logger.warn("Unexpected error", e); Thread.currentThread().interrupt(); Platform.exit(); System.exit(0);}
}
}).start();

最佳答案

将您的主题设为 daemon thread .

The Java Virtual Machine exits when the only threads running are all daemon threads.

您还需要让线程知道它应该退出。

import javafx.application.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import java.util.Date;
import java.util.concurrent.atomic.AtomicBoolean;

public class Sleeper extends Application{
@Override
public void start(Stage stage) throws Exception {
Label time = new Label();

AtomicBoolean shuttingDown = new AtomicBoolean(false);

Thread thread = new Thread(() -> {
while (!shuttingDown.get() && !Thread.interrupted()) {
Platform.runLater(() -> time.setText(new Date().toString()));
try {
Thread.sleep(1_000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
thread.setDaemon(true);
thread.start();

Button exit = new Button("Exit");
exit.setOnAction(event -> {
shuttingDown.set(true);
thread.interrupt();
Platform.exit();
});

stage.setScene(new Scene(new StackPane(time), 240, 40));
stage.show();
}
}

您不需要在线程的异常处理程序中调用 Platform.exit() 或 System.exit(0)。

您可能会发现使用 JavaFX 更方便 Task .任务文档解释了取消任务的方法。

但实际上,我根本不建议为您的示例使用另一个线程,而是使用时间轴,如 Sergey 在他对 JavaFX periodic background task 的回答中的五秒奇迹中所例证的那样.

关于java - 如何正确退出 javaFX Platform.runLater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004666/

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