问题描述
我一直在研究这个问题,但至少我还是非常困惑。
I have been doing some research on this but I am still VERY confused to say the least.
任何人都可以给我一个具体的例子来说明何时使用任务
以及何时使用 Platform.runLater(Runnable);
?究竟有什么区别?什么时候使用其中任何一个是否有黄金法则?
Can anyone give me a concrete example of when to use Task
and when to use Platform.runLater(Runnable);
? What exactly is the difference? Is there a golden rule to when to use any of these?
如果我错了也不是这两个对象是另一种创造另一种方式的方法GUI中主线程内的线程(用于更新GUI)?
Also correct me if I'm wrong but aren't these two "Objects" a way of creating another thread inside the main thread in a GUI (used for updating the GUI)?
推荐答案
使用平台。 runLater(...)
用于快速和简单的操作,任务
用于复杂和大型操作。
Use Platform.runLater(...)
for quick and simple operations and Task
for complex and big operations .
- Use case for
Platform.runLater(...)
- Use case for
Task
: Task Example in Ensemble App
示例:为什么我们不能使用 Platform.runLater(... )
用于长计算(取自下面的参考文献)。
Example: Why Can't we use Platform.runLater(...)
for long calculations (Taken from below reference).
问题:背景知识hread,其数量从0到100万,并在UI中更新进度条。
Problem: Background thread which just counts from 0 to 1 million and update progress bar in 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();
代码使用任务:
Code using Task :
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();
参考:
这篇关于JavaFX中的Platform.runLater和Task的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!