如何创建一个只运行一次的延迟线程,修改 JavaFX 中的某些 UI 元素?

How to make a delayed thread that runs only once modifying some UI elements in JavaFX?

我正在制作基于 JavaFX 的 Connect4 游戏 UI。它是基于 AI 的。

我需要AI的磁盘在用户的磁盘完全下降到板上后下降。一旦用户点击放下他的磁盘,用户的磁盘和AI的磁盘同时下降。

我使用了 ScheduledService class。这允许使用初始延迟,但任务继续连续执行。

我也尝试过使用 TimerTask,但是当代码试图修改 UI 个元素时会抛出异常。

我如何创建一个在初始延迟(比如 500 毫秒)后运行的线程,执行一次(修改UI 元素)然后终止(不像 ScheduledService class 那样重复执行)?

如果你想从非 UI 线程修改 gui,你必须使用:

Platform.runLater

http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater(java.lang.Runnable)

要设置延迟,试试这个:

    ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    service.schedule(() -> {
        //do something

        Platform.runLater(() -> {
            //do something with ui
        });
    }, 5, TimeUnit.SECONDS);