gpt4 book ai didi

java - JavaFX 中的 Platform.runLater 和 Task

转载 作者:IT老高 更新时间:2023-10-28 11:49:21 26 4
gpt4 key购买 nike

我一直在对此进行一些研究,但至少可以说我仍然很困惑。

谁能给我一个具体的例子,说明何时使用 Task 以及何时使用 Platform.runLater(Runnable);?究竟有什么区别?何时使用其中任何一个是否有黄金法则?

如果我错了也请纠正我,但这两个“对象”不是在 GUI 的主线程内创建另一个线程的一种方式(用于更新 GUI)吗?

最佳答案

Platform.runLater(...) 用于快速简单的操作,Task 用于复杂和大型操作。

示例:为什么我们不能使用 Platform.runLater(...) 进行长计算(取自以下引用)。

问题:后台线程仅从 0 计数到 100 万并更新 UI 中的进度条。

使用 Platform.runLater(...) 的代码:

final ProgressBar bar = new ProgressBar();
new Thread(new Runnable() {
@Override public void run() {
for (int i = 1; i <= 1000000; i++) {
final int counter = i;
Platform.runLater(new Runnable() {
@Override public void run() {
bar.setProgress(counter / 1000000.0);
}
});
}
}).start();

This is a hideous hunk of code, a crime against nature (and programming in general). First, you’ll lose brain cells just looking at this double nesting of Runnables. Second, it is going to swamp the event queue with little Runnables — a million of them in fact. Clearly, we needed some API to make it easier to write background workers which then communicate back with the UI.

使用任务的代码:

Task task = new Task<Void>() {
@Override public Void call() {
static final int max = 1000000;
for (int i = 1; i <= max; i++) {
updateProgress(i, max);
}
return null;
}
};

ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();

it suffers from none of the flaws exhibited in the previous code

引用: Worker Threading in JavaFX 2.0

关于java - JavaFX 中的 Platform.runLater 和 Task,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784333/

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