首页 > Java > java教程 > JavaFX `Platform.runLater` 与 `Task`:何时使用哪个进行 GUI 更新?

JavaFX `Platform.runLater` 与 `Task`:何时使用哪个进行 GUI 更新?

DDD
发布: 2024-12-08 22:58:14
原创
213 人浏览过

JavaFX `Platform.runLater` vs. `Task`: When to Use Which for GUI Updates?

JavaFX 中的 Platform.runLater 和 Task:何时使用各自和差异

JavaFX 提供了两种在 GUI 线程上执行任务的机制: Platform.runLater 和任务。了解何时使用每种方法可以显着提高 GUI 响应能力和代码可读性。

Platform.runLater

使用 Platform.runLater 进行不执行大量计算的快速而简单的操作或需要很长时间才能完成。示例包括:

  • 更新 GUI 元素(例如文本、滑块)
  • 处理事件处理程序(例如按钮单击)
  • 执行不阻塞的轻量级计算这GUI

任务

使用任务进行更复杂和耗时的操作。该类提供了额外的功能,例如:

  • 在单独的线程中后台执行
  • 向 GUI 线程报告进度
  • 取消任务
  • 将进度绑定到 GUI 元素

黄金法则用法

一般准则是使用 Platform.runLater 从非 GUI 线程内更新 GUI。在需要时使用任务:

  • 执行长时间运行的计算
  • 将进度报告回 GUI
  • 取消操作
  • 将任务进度绑定到 GUI 元素

GUI线程

Platform.runLater 和 Task 都会创建与主 GUI 线程分开运行的工作线程。这使您可以从后台线程安全地更新 GUI,而不会遇到并发问题。

示例:长计算

考虑一个场景,您想要执行长计算,并且更新 GUI 中的进度条。使用 Platform.runLater 会用大量小任务淹没事件队列,从而减慢 GUI 的速度。相反,使用 Task 在单独的线程中执行计算,并根据需要将进度报告回 GUI:

Task<Void> task = new Task<>() {
  @Override
  public Void call() {
    for (int i = 0; i < 100000; i++) {
      updateProgress(i, 100000);
    }
    return null;
  }
};
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
登录后复制

在这种情况下,bar 是 GUI 中的进度条,将随着计算而更新取得进展。

以上是JavaFX `Platform.runLater` 与 `Task`:何时使用哪个进行 GUI 更新?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板