gpt4 book ai didi

JavaFX 多任务

转载 作者:行者123 更新时间:2023-12-01 19:45:56 25 4
gpt4 key购买 nike

有人可以帮我吗?我有一个使用 JavaFX 的程序。现在按下按钮后我想做 n 次计算。这些计算应该使用线程(并行)完成,并且它们不应该使主 JavaFX 应用程序挂起/卡住。我想做的是在计算运行时显示加载状态,如果所有任务都已完成计算,我想继续程序(删除加载状态并显示结果)。

在阅读了一些有关“JavaFX 中的并发性”的内容后,我得出了以下结论:

for (int i = 0; i < n; ++i) {
CalcTask task = new CalcTask(i);

task.setOnSucceeded(e -> {
// process is just a static method in which I count
// how many results (i) I already received
// (where n is the required amount). If i == n,
// I know I am done with all the tasks
process(task.getValue());
});

new Thread(task).start();
}

和 CalcTask 类:

public class CalcTask extends Task<Integer> {
protected int id;

public CalcTask (int id) {
this.id = id;
}

@Override
public Integer call() {
return CALCULATION_RESULT;
}
}

现在我的问题是:这对我来说似乎有点“笨拙”。在 JavaFX 中是否有更好的方法来实现这样的东西?谢谢:)

最佳答案

由于您扩展了 Task 类,因此您还可以覆盖方法 succeeded() 并删除主线程上 task.setOnSucceeded() 的调用:

for (int i = 0; i < n; ++i) {
CalcTask task = new CalcTask(i);
new Thread(task).start();
}

public class CalcTask extends Task<Integer> {
protected int id;

public CalcTask (int id) {
this.id = id;
}

public void succeeded() {
process(this.getValue());
}

@Override
public Integer call() {
return CALCULATION_RESULT;
}
}

甚至使用普通的Runnable而不是Task:

public class CalcTask implements Runnable {
protected int id;

public CalcTask (int id) {
this.id = id;
}

@Override
public void run() {
CALCULATION_RESULT = calculate();
process(CALCULATION_RESULT);
}
}

关于JavaFX 多任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53357250/

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