我正在为我的团队创建一个Java Swing(WindowBuilder)应用程序,但是由于缺乏知识,我一直不知所措。我想要实现的是在用户单击先前的选择之后,自动填充ComboBox中的项目,依此类推。该代码当前的工作方式是,当用户为特定的HTTP GET请求填写信息时,会向他们显示一个ComboBox,该ComboBox预先填充了该请求中的格式化信息,他们可以从列表中选择一项,然后选择一次他们会使用先前请求中的详细信息启动另一个HTTP GET请求,等等。
我认为我的方法是不正确的,因为每当我检索JSON HTTP“ GET”响应时,我都会不断遇到“ MalformedURL”异常。我调试了代码,发现该代码跳过了针对特定ComboBox的所有ActionListener。当前,每次用户从下拉列表中选择值时,我在代码中多次使用上述代码来模拟comboBox.GetSelectedItem()
事件。我认为代码可能会不断跳过ActionListener,这可能是由于它多次在另一个之上实现的原因,因此总是监听单个特定事件吗?
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
if (comboBox.getSelectedItem().toString().contains(name.substring(0, name.lastIndexOf(",")))) {
selectedViewURL = name.substring(name.lastIndexOf(",") + 1);
break;
}
}
try {
String getNodeViewJson = Get(selectedViewURL + "/api/json?pretty=true");
list.clear();
comboBox.removeAll();
JSONObject nodeViewJsonObject = new JSONObject(getNodeViewJson);
JSONArray jobsArrayNodeView = nodeViewJsonObject.getJSONArray("jobs");
if (jobsArrayNodeView != null) {
for (int i = 0; i < jobsArrayNodeView.length(); i++) {
JSONObject jsonObject = jobsArrayNodeView.getJSONObject(i);
String jenkinsClass = jsonObject.getString("_class");
String jenkinsName = jsonObject.getString("name");
String jenkinsURL = jsonObject.getString("url");
if (jenkinsClass.contains("com.cloudbees.hudson.plugins.folder.Folder")) {
comboBox.addItem(jenkinsName);
list.add(jenkinsName + "," + jenkinsURL);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
我期望ComboBox在ComboBox列表中选择一个预先存在的值时填充值,并最终遵循相同的结构直到最后。谢谢您的帮助。
这是在使用来自HTTP GET请求的初始值填充ComboBox之后立即显示的重复错误:
java.net.MalformedURLException: no protocol: /api/json?pretty=true
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at impl.Logic.Get(Logic.java:141)
at net.java.maven_jenkins_tool.JenkinsRemoteRegressionTool.JenkinsTool$8.actionPerformed(JenkinsTool.java:851)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.DefaultComboBoxModel.addElement(Unknown Source)
at javax.swing.JComboBox.addItem(Unknown Source)
at net.java.maven_jenkins_tool.JenkinsRemoteRegressionTool.JenkinsTool$6.itemStateChanged(JenkinsTool.java:789)
这是第789行:comboBox.addItem(jenkinsName);
这是第851行:String getNodeViewJson = Get(selectedViewURL + "/api/json?pretty=true");
当然不会触发后一行,因为由于我遇到的ComboBox选择问题,“ SelectedViewURL”字符串被视为NULL。