如何使一个只运行一次的延迟线程修改JavaFX中的一些UI元素?
我正在制作一个基于JavaFX的Connect4游戏UI。它是基于人工智能的 我需要人工智能的磁盘下降后,用户的磁盘已经完全下降到董事会。只要用户点击放下他的磁盘,用户的磁盘和AI的磁盘就会同时放下 我使用了ScheduledService类。这允许使用初始延迟,但任务将继续连续执行 我也尝试过使用TimerTask,但当代码试图修改UI元素时会引发异常如何使一个只运行一次的延迟线程修改JavaFX中的一些UI元素?,java,javafx,Java,Javafx,我正在制作一个基于JavaFX的Connect4游戏UI。它是基于人工智能的 我需要人工智能的磁盘下降后,用户的磁盘已经完全下降到董事会。只要用户点击放下他的磁盘,用户的磁盘和AI的磁盘就会同时放下 我使用了ScheduledService类。这允许使用初始延迟,但任务将继续连续执行 我也尝试过使用TimerTask,但当代码试图修改UI元素时会引发异常 如何使线程在初始延迟后运行(比如500毫秒),执行一次(修改UI元素),然后终止(不像ScheduledService类中那样重复执行)?如果
如何使线程在初始延迟后运行(比如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
justcancel
it。但这对于一个简单的工作来说太过分了。在使用Thread开始执行之前,只需让新任务睡眠500ms
。在call()中睡眠(500)
可能是首选的解决方案,而不是使用多个线程。