Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使一个只运行一次的延迟线程修改JavaFX中的一些UI元素?_Java_Javafx - Fatal编程技术网

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

如何使一个只运行一次的延迟线程修改JavaFX中的一些UI元素?,java,javafx,Java,Javafx,我正在制作一个基于JavaFX的Connect4游戏UI。它是基于人工智能的 我需要人工智能的磁盘下降后,用户的磁盘已经完全下降到董事会。只要用户点击放下他的磁盘,用户的磁盘和AI的磁盘就会同时放下 我使用了ScheduledService类。这允许使用初始延迟,但任务将继续连续执行 我也尝试过使用TimerTask,但当代码试图修改UI元素时会引发异常 如何使线程在初始延迟后运行(比如500毫秒),执行一次(修改UI元素),然后终止(不像ScheduledService类中那样重复执行)?如果

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

我需要人工智能的磁盘下降后,用户的磁盘已经完全下降到董事会。只要用户点击放下他的磁盘,用户的磁盘和AI的磁盘就会同时放下

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

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


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

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

Platform.runLater

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

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

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

如何设置线程的初始延迟的可能重复?与ScheduledService类中重复执行任务不同,我只需要在指定的延迟后执行一次任务。您可以将and设置为on
setOnSucceeded
just
cancel
it。但这对于一个简单的工作来说太过分了。在使用
Thread开始执行之前,只需让新任务睡眠
500ms
。在
call()中睡眠(500)
可能是首选的解决方案,而不是使用多个线程。