我的情况是这样的。我想ping一系列的IP地址。我的代码的工作原理是,我可以把我的变量,八位数3和4的开始和结束,并在控制台中得到我想要的结果。所有的地址都会出现在这个范围内,并告诉我它们是通过还是失败。我的问题是,我试图将每个地址以多行的方式传递给同一个JLabel,就像控制台中显示的那样。 使用这段代码,我只得到最后一个地址输出到JLabel中。我到底漏掉了什么? 同样,我在Console中得到了我想要的结果,只是需要在JLabel中得到同样的结果。举个例子。
Console显示10.91.50.1 10.91.50.2 10.91.50.3 10.91.50.4。
JLabel 只返回 : 10.91.50.4
见以下代码:
btnCheckPing1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt) {
//System.out.println("Check Ping Range");
/*
start ip 10.0.a.b end ip 10.0.x.y
*/
a = lowX.getText(); // 3rd octet, first group
b = lowY.getText(); // 4th octet, first group
x = highX.getText(); // 3rd octet, second group
y = highY.getText(); // 4th octet, second group
String pingThis = "";
int convertA = Integer.parseInt(a);
int convertB = Integer.parseInt(b);
int convertX = Integer.parseInt(x);
int convertY = Integer.parseInt(y);
if(convertA == convertX) {
System.out.println("3rd Octet is in range");
// can ping range
for(int i = convertB; i <= convertY; i++) {
//System.out.println("10.92." + x + "." + i);
pingThis = "10.92." + x + "." + i;/
//System.out.println(pingThis);
try {
InetAddress pingRange = InetAddress.getByName(pingThis);
boolean reachableGroup = pingRange.isReachable(100);
if(reachableGroup == true) {
//System.out.println(pingRange + " is valid");
/////////Output to JLabel will go here./////////////
lblRangeOut.setText(pingThis);
} else {
//System.out.println(pingRange + " is not valid");
}
} catch (Exception e) {
//Nothing goes here
}}
} else {
// cannot ping range
System.out.println("3rd octet out of range");
}
//System.out.println("10.92." + a + "." + b + " " + "10.92." + x + "." + y);
}
});
你使用的是setter,也就是覆盖以前的值。那么,你需要做的是在前一个变量的末尾追加你的输出,比如。
lblRangeOut.setText(lblRangeOut.getText() + pingThis)
正如camickr在评论中提到的,JLabel不会是我的第一选择 :) 显然,正如他也指出的那样。由于这些原因,JTextArea会更好,代码看起来会像这样。
txtRangeOut.setText(txtRangeOut.getText() + System.lineSeparator() + pingThis)
不管怎么说,替换之前的值的主要原因是setter会覆盖它。所以新的值需要由之前的值和附加的字符串组成。