java - java.lang.NumberFormatException:对于输入字符串“v2.6.5.2”
问题描述
我正在使用 java 实现 RPC(JSON) 系统,但在回答其中一个调用时遇到错误。
SperoCoin.java
1 package com.l2spero.gameserver.handler.voicedcommandhandlers;
2 public class SperoCoin
3 {
4 public NpcHtmlMessage nhm = new NpcHtmlMessage(5);
5 public TextBuilder replyMSG = new TextBuilder("");
6
7 public String address = "127.0.0.1";
8 public int port = 55681;
9 public String protocol = "http";
10 public String user = "user";
11 public String password = "password";
12
13 BitcoindApi api = BitcoindApiFactory.createConnection(address, port, protocol, user, password);
14
15
16 public void getInfo(String[] args) throws BitcoindConnector4JException
17 {
18 try {
19 Info info = api.getinfo();
20 BlockchainInfo getblockchaininfo = api.getblockchaininfo();
21
22 replyMSG.append("<html><title>SPEROCOIN WALLET</title><body>");
23 replyMSG.append("<font color=\"FFFF00\"><center>L2SPERO WALLET</center></font>");
24 replyMSG.append("<font color=\"FFFF00\"><center>Version:" + info.getVersion() + "</center></font>");
25 replyMSG.append("<font color=\"FFFF00\"><center>Protocol Version:" + info.getProtocolversion() + "</center></font>");
26 replyMSG.append("<font color=\"FFFF00\"><center>Wallet Version:" + info.getWalletversion() + "</center></font>");
27 replyMSG.append("<font color=\"FFFF00\"><center>Chain:" + getblockchaininfo.getChain() + "</center></font>");
28 replyMSG.append("<font color=\"FFFF00\"><center>Blocks:" + info.getBlocks() + "</center></font>");
29 replyMSG.append("</body></html>");
30
31 }catch (Exception e) {
32 e.printStackTrace();
33 }
34 }
35 }
上面的文件显示了我在 JAVA 应用程序中需要的文本,但是第 24 行,当我运行命令时出现错误:
读取失败:[C] 38 Say2 ;java.lang.NumberFormatException:对于输入字符串:“v2.6.5.2:Beta 2.6.5.2”com.l2spero.sperocoin.core.BitcoindConnector4JException:java.lang.NumberFormatException:对于输入字符串:“v2.6.5.2:Beta 2.6.5.2"
在外部应用程序内部进行调用并以 JSON 格式返回结果的 Info.java 文件是这样的:
package com.l2spero.sperocoin.response;
public class Info extends BaseResponse {
private Double balance;
private long blocks;
private long connections;
private Double difficulty;
private String errors;
private long keypoololdest;
private long keypoolsize;
private Double paytxfee;
private long protocolversion;
private String proxy;
private Double relayfee;
private boolean testnet;
private long timeoffset;
private long version;
private long walletversion;
public Double getBalance() {
return balance;
}
public void setBalance(Double balance) {
this.balance = balance;
}
public long getBlocks() {
return blocks;
}
public void setBlocks(long blocks) {
this.blocks = blocks;
}
public long getConnections() {
return connections;
}
public void setConnections(long connections) {
this.connections = connections;
}
public Double getDifficulty() {
return difficulty;
}
public void setDifficulty(Double difficulty) {
this.difficulty = difficulty;
}
public String getErrors() {
return errors;
}
public void setErrors(String errors) {
this.errors = errors;
}
public long getKeypoololdest() {
return keypoololdest;
}
public void setKeypoololdest(long keypoololdest) {
this.keypoololdest = keypoololdest;
}
public long getKeypoolsize() {
return keypoolsize;
}
public void setKeypoolsize(long keypoolsize) {
this.keypoolsize = keypoolsize;
}
public Double getPaytxfee() {
return paytxfee;
}
public void setPaytxfee(Double paytxfee) {
this.paytxfee = paytxfee;
}
public long getProtocolversion() {
return protocolversion;
}
public void setProtocolversion(long protocolversion) {
this.protocolversion = protocolversion;
}
public String getProxy() {
return proxy;
}
public void setProxy(String proxy) {
this.proxy = proxy;
}
public Double getRelayfee() {
return relayfee;
}
public void setRelayfee(Double relayfee) {
this.relayfee = relayfee;
}
public boolean getTestnet() {
return testnet;
}
public void setTestnet(boolean testnet) {
this.testnet = testnet;
}
public long getTimeoffset() {
return timeoffset;
}
public void setTimeoffset(long timeoffset) {
this.timeoffset = timeoffset;
}
public long getVersion() {
return version;
}
public void setVersion(long version) {
this.version = version;
}
public long getWalletversion() {
return walletversion;
}
public void setWalletversion(long walletversion) {
this.walletversion = walletversion;
}
@Override
public String toString() {
return "GetInfo [balance=" + balance + ", blocks=" + blocks + ", connections=" + connections + ", difficulty="
+ difficulty + ", errors=" + errors + ", keypoololdest=" + keypoololdest + ", keypoolsize="
+ keypoolsize + ", paytxfee=" + paytxfee + ", protocolversion=" + protocolversion + ", proxy=" + proxy
+ ", relayfee=" + relayfee + ", testnet=" + testnet + ", timeoffset=" + timeoffset + ", version="
+ version + ", walletversion=" + walletversion + "]";
}
}
源应用程序中 JSON 的返回是这样的:
{
"version" : "v2.6.5.2: Beta 2.6.5.2",
"protocolversion" : 700004,
"walletversion" : 60000,
"balance" : 0.00000000,
"newmint" : 0.00000000,
"stake" : 0.00000000,
"blocks" : 1326067,
"timeoffset" : -1,
"moneysupply" : 194143.36538519,
"connections" : 4,
"proxy" : "",
"ip" : "0.0.0.0",
"difficulty" : {
"proof-of-work" : 0.00277217,
"proof-of-stake" : 0.00024414
},
"testnet" : false,
"keypoololdest" : 1613136757,
"keypoolsize" : 101,
"paytxfee" : 0.00000000,
"mininput" : 0.00000000,
"isunlocked" : true,
"unlocked_until" : 0,
"errors" : ""
}
解决方案
Info 类中的字段很长
但在 json 中它是 String
所以我认为你需要将java类中的版本类型更改为字符串
推荐阅读
- python - Flask:无法在 Python 列表中解压不可迭代的 int 对象
- javascript - 显示 li 包含特定字符串并隐藏不包含的字符串
- reactjs - 如何为 React Navigation 的 Tab.Screen 构建可重用组件?
- html - 如何在 Marp/Marpit 中创建完整的幻灯片大小拉伸三列
- node.js - 如何使用带有 HTTPS 的 Hapi v20 服务器让 CORS 用于 API 调用?
- javascript - 如何将 .gltf 文件与其他资产组合;用于 babylonjs 的 bin 和 png 文件
- java - 无法在 jar 文件中找到 Derby 数据库
- python - 如何在大型多索引数据帧上灵活地读取、重组和绘制时间和空间查询?
- python - 作为字典值的属性
- python - 列表中的模糊排序列表