gpt4 book ai didi

Java/Swing : the fast/slow UI binding problem

转载 作者:搜寻专家 更新时间:2023-11-01 01:19:42 24 4
gpt4 key购买 nike

我需要一种方法将 UI 指示器绑定(bind)到快速变化的值。

我有一个 NumberCruncher 类,它在关键的非 UI 线程中执行大量繁重的处理,每秒进行数千次循环迭代,其中一些会导致集合发生变化我关心的参数。 (将它们视为键值存储)

我想在 UI 线程中以较慢的速度显示它们; 10-20Hz 就可以了。如何添加 MVC 样式的通知,以便我的 NumberCruncher 代码不需要了解 UI 代码/绑定(bind)?

最佳答案

执行此操作的惯用方法是使用 SwingWorker类,并使用对 publish(V...) 的调用来定期通知 Event Dispatch 线程,使其更新 UI。

在下面取自 Javadoc 的示例中,数字运算发生在 doInBackground() 方法的工作线程上,该方法在每次迭代时调用 publish。此调用导致 process(V...) 方法被在事件调度线程上异步调用,从而允许它更新 UI。请注意,这可确保用户界面始终从事件调度线程更新。另请注意,您可以选择每 N 次迭代调用一次发布,以降低用户界面更新的频率。

来自 Javadoc 的示例

 class PrimeNumbersTask extends 
SwingWorker<List<Integer>, Integer> {
PrimeNumbersTask(JTextArea textArea, int numbersToFind) {
//initialize
}

@Override
public List<Integer> doInBackground() {
while (! enough && ! isCancelled()) {
number = nextPrimeNumber();
publish(number);
setProgress(100 * numbers.size() / numbersToFind);
}
}
return numbers;
}

@Override
protected void process(List<Integer> chunks) {
for (int number : chunks) {
textArea.append(number + "\n");
}
}
}

关于Java/Swing : the fast/slow UI binding problem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548083/

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