gpt4 book ai didi

java - 使用 SwingWorker 从 map 中检索数据

转载 作者:行者123 更新时间:2023-11-29 03:18:38 25 4
gpt4 key购买 nike

我有一个创建 GUI 的类,并且有一个带有 ItemListener 的 JComboBox。在 ItemEvent.Selected 事件中,我创建了工作人员并尝试将数据读入 map ,但内容始终为空。

我的猜测是,这是由于线程在线程完成之前执行并离开 ItemListener 而发生的。

我已经添加了相关的代码片段,希望你们能帮助我确定问题出在哪里。

private void updateUI(String text) {

StringUtilities.invokeLater(new Runnable() {

@Override
public void run() {
text.append(text + "\n");
}
}
}

private class ComboBoxListener extends ItemListener {

@Override
public void itemStateChange(ItemEvent e) {

if(e.getStateChange() == ItemEvent.DESELECTED) { return; }
if(e.getStateChange() == ItemEvent.SELECTED) {

//do stuff
Map<String, String> map = new HashMap<String, String>();

new MyWorker(var1, var2) {

@Override
public updateUI(String text) {
updateMainUI(text);
}

@Override
public updateMap(String name, String value) {
map.put(name, value);
}
}.execute();

for(Map.Entry<String, String> entry : map.entrySet()) {
// do something with map contents
}
}
}
}

updateUIupdateMapMyWorker 中的抽象方法,我正在覆盖它们以便我可以将更新发送到 gui。

简而言之,我怎样才能从工作人员那里取回数据,以便我可以在事件完成之前执行它?

我大部分都是靠内存写的,因为我现在没有实际的代码,所以请忽略小的拼写错误和语法问题。

最佳答案

A SwingWorker 执行它的 doInBackground()在另一个线程上异步方法;结果将在未来不确定的时间可用,但您正在立即检查 map 条目。相反,publish()每个Map.Entry<String, String>因为它在 doInBackground() 中可用和 process()可用时的值。

如果中间结果可以有用地显示在另一个组件中,请更新该组件的模型,如图所示here对于 JLabel 的文本.如果不是,覆盖 done()使用完成的结果,如图所示here对于 Icon .

关于java - 使用 SwingWorker 从 map 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24976918/

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