gpt4 book ai didi

java - 从线程内创建的组合框中获取选定的项目

转载 作者:行者123 更新时间:2023-12-03 13:04:32 25 4
gpt4 key购买 nike

我有这段代码可以从数据库中读取数据并将其显示在组合框中:

                //this is inside a thread
@Override
public void readResponse(InputStream input) throws IOException {

InputStreamReader reader = new InputStreamReader(input);
JSONParser parser = new JSONParser();
Hashtable response = parser.parse(reader);

java.util.List allResult = (java.util.List) response.get("AllResult");
System.out.println(allResult);
try {
String[] data = new String[allResult.size()];
for (int i = 0; i < allResult.size(); i++) {

Object obj = allResult.get(i);
String result = (String) ((Hashtable) obj).get("Status");
String brokerName = (String) ((Hashtable) obj).get("brokerName");
if (result.equalsIgnoreCase("ok")) {
for (int j = 0; j < 4; j++) {
data[i] = brokerName;
}
}
}
ComboBox brokerNames = new ComboBox(data);
assignCon.addComponent(brokerNames);
} catch (Exception ex) {
ex.printStackTrace();
}

} //all these work well

当我单击提交按钮时,需要从该组合框中获取选定的项目,如下所示:
            Button ass = new Button("ASSIGN");
ass.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String names = brokerNames.getSelectedItem.toString();
}
});

现在,由于我无法从线程外部访问brokerNames,这给了我错误。有人可以告诉我我在做什么错吗?还是解决这个问题的更好方法?谢谢你。

最佳答案

您的假设是不正确的,因为它绝对与Threads无关与变量范围无关,而与您在本地块中声明brokerNames无关,仅此而已,就使该变量在该块外的任何代码中均不可见。解决此问题-将其设置为类中的一个字段。

附带说明一下,如果您要在后台线程中将brokerName添加到GUI中,则由于要更改Swing之外的可见Swing组件(用于容纳brokerName的容器)的状态,因此会有其他原因的危险代码事件线程。这不会导致您遇到的编译器问题,但可能导致间歇性的难以调试的异常被抛出。我会在创建GUI时将JComboBox添加到GUI中,而不是在后台线程中。

关于java - 从线程内创建的组合框中获取选定的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280050/

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