如何在JavaFX中修改某些UI元素,使延迟线程只运行一次



我正在制作一个基于JavaFX的Connect4游戏UI。它是基于人工智能的。

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

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

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

如何使线程在初始延迟(比如500ms)后运行,执行一次,然后终止(不像ScheduledService类中那样重复执行)?

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

Platform.runLater

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

为了设置延迟,请尝试以下操作:

    ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    service.schedule(() -> {
        //do something
        Platform.runLater(() -> {
            //do something with ui
        });
    }, 5, TimeUnit.SECONDS);

最新更新