我正在制作一个基于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);