java.lang.NumberFormatException 在系统 Groovy 脚本中
java.lang.NumberFormatException in System Groovy script
def ipadd = addr.hostAddress
//println ipadd
String myString = new Integer(ipadd);
def pa = new ParametersAction([new StringParameterValue('IPADDR', myString)]);
Thread.currentThread().executable.addAction(pa)
println 'Script finished! \n';
我试图通过将其添加到系统变量来保存从属的 IP 地址,并将其传递给下一个 job.But 当我 运行 作业时,我遇到以下异常:
日志:
Slave Machine 2: X.X.X.X
java.lang.NumberFormatException: For input string: "X.X.X.X"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.<init>(Integer.java:867)
IPv4地址包含3个点,所以不能直接解析为Integer
。
我想您正试图将其转换为对应的 int
表示 IP 32 位。这可以在 Java 中完成,如下所示:
public static int ipToInt32(String ip) {
Inet4Address ipAddress;
try {
ipAddress = (Inet4Address) InetAddress.getByName(ip);
} catch (UnknownHostException e) {
throw new IllegalStateException("Cannot convert IP to bits: '" + ip + "'", e);
}
byte[] ipBytes = ipAddress.getAddress();
return ((ipBytes[0] & 0xFF) << 24)
| ((ipBytes[1] & 0xFF) << 16)
| ((ipBytes[2] & 0xFF) << 8)
| (ipBytes[3] & 0xFF);
}
您不能将 ipadd 转换为整数。因为它不是一个有效的整数。正如我所见,您不必强制将 ipadd 转换为整数。因此,我的建议是将 String myString = new Integer(ipadd)
行替换为以下行。
String myString = new String(ipadd)
def ipadd = addr.hostAddress
//println ipadd
String myString = new Integer(ipadd);
def pa = new ParametersAction([new StringParameterValue('IPADDR', myString)]);
Thread.currentThread().executable.addAction(pa)
println 'Script finished! \n';
我试图通过将其添加到系统变量来保存从属的 IP 地址,并将其传递给下一个 job.But 当我 运行 作业时,我遇到以下异常: 日志:
Slave Machine 2: X.X.X.X
java.lang.NumberFormatException: For input string: "X.X.X.X"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.<init>(Integer.java:867)
IPv4地址包含3个点,所以不能直接解析为Integer
。
我想您正试图将其转换为对应的 int
表示 IP 32 位。这可以在 Java 中完成,如下所示:
public static int ipToInt32(String ip) {
Inet4Address ipAddress;
try {
ipAddress = (Inet4Address) InetAddress.getByName(ip);
} catch (UnknownHostException e) {
throw new IllegalStateException("Cannot convert IP to bits: '" + ip + "'", e);
}
byte[] ipBytes = ipAddress.getAddress();
return ((ipBytes[0] & 0xFF) << 24)
| ((ipBytes[1] & 0xFF) << 16)
| ((ipBytes[2] & 0xFF) << 8)
| (ipBytes[3] & 0xFF);
}
您不能将 ipadd 转换为整数。因为它不是一个有效的整数。正如我所见,您不必强制将 ipadd 转换为整数。因此,我的建议是将 String myString = new Integer(ipadd)
行替换为以下行。
String myString = new String(ipadd)