如何创建一个只运行一次的延迟线程,修改 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);
我正在制作基于 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);