作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
使用 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/
我是一名优秀的程序员,十分优秀!