gpt4 book ai didi

java - 为什么 Platform.runLater 不检查它当前是否在 JavaFX 线程上?

转载 作者:太空狗 更新时间:2023-10-29 22:44:16 28 4
gpt4 key购买 nike

使用 JavaFX 8 时,我们需要通过 Platform.runLater 运行与 GUI 的交互,否则如果从另一个线程运行它们将抛出异常。

但是 Platform.runLater 的实现从不检查它当前是否在 JavaFX 线程上。

我写了下面的方法:

public static void runSafe(final Runnable runnable) {
Objects.requireNonNull(runnable, "runnable");
if (Platform.isFxApplicationThread()) {
runnable.run();
}
else {
Platform.runLater(runnable);
}
}

这确保它永远不会在非 fx 应用程序线程上运行。

默认实现不做这种短路有什么原因吗?

最佳答案

runLater 本质上是将 Runnable 放入队列中,以便在 FX 线程可用时执行。可以通过非 FX 线程访问该方法。假设一些其他线程已将任务放入 runLater 队列,然后再次调用 runLater,无论是否来自 FX 线程,都应将新任务放在该队列的尾部排队。

通过短路,您建议之前的任务基本上具有较低的优先级,这可能是不可取的。

关于java - 为什么 Platform.runLater 不检查它当前是否在 JavaFX 线程上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24043420/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com