首先,这是困扰我的 XML 文件的一个片段。完整的 XML 文件非常大,包含许多名称不同的“包”。
<repo version="2">
<package name="packageNameHere">
<author>Some Author</author>
<version>0.1</version>
<description>A description</description>
<dependencies/>
<API>
<max>0.1</max>
<min>0.1</min>
</API>
<download>
http://www.somedownload.com/downloadfile.jar
</download>
</package>
</repo>
该程序对 XML 文件进行初始扫描,并获取所有包名称的列表。然后要求用户输入包名称。这DefaultHandler
用于查找有关该软件包的信息。
private String packageToFind = null, currentElement = "";
public Package locatedPack = null;
private boolean finished = false;
private StringBuffer buffer = new StringBuffer();
public PackageSearchingRepoXMLHandler(String PackageToFind) {
this.packageToFind = PackageToFind;
}
@Override
public void startElement(String uri, String localName, String elementName, Attributes attributes) throws SAXException {
if(!finished && elementName.equals("package") && attributes.getValue("name").equals(packageToFind))
locatedPack = new Package(packageToFind);
else if(locatedPack != null && !finished) {
currentElement = elementName;
}
}
@Override
public void endElement(String uri, String localName, String elementName) throws SAXException {
if(locatedPack != null && !finished) {
switch(currentElement) {
case "author":
locatedPack.setAuthor(buffer.toString());
buffer = new StringBuffer();
break;
case "version":
locatedPack.setVersion(Double.parseDouble(buffer.toString()));
buffer = new StringBuffer();
break;
case "description":
locatedPack.setDescription(buffer.toString());
buffer = new StringBuffer();
break;
case "dependencies":
locatedPack.setDependencies(buffer.toString().split(", "));
buffer = new StringBuffer();
break;
case "max":
locatedPack.setApiMAX(Double.parseDouble(buffer.toString()));
buffer = new StringBuffer();
break;
case "min":
locatedPack.setApiMIN(Double.parseDouble(buffer.toString())); //This is line 157
buffer = new StringBuffer();
break;
case "download":
try {
locatedPack.setDownloadLink(new URL(buffer.toString()));
} catch (MalformedURLException e) {/* Won't happen */}
buffer = new StringBuffer();
break;
case "package":
finished = true;
default:
break;
}
}
}
@Override
public void characters(char[] ch, int start, int length) {
if (!finished)
buffer.append(new String(ch, start, length));
}
ANumberFormatException
正在从Double.parseDouble()
零件中抛出;原因有点是empty String
。我不能给你一个具体的行号,因为控制台没有给我一个。
任何人都知道导致我的程序无法正确输出数据的这个恼人错误的原因吗?困扰我很久了!:@
编辑
这是确切的堆栈跟踪(更多的是,我删除了所有的摇摆废话......):
java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at [removed class/package info].endElement(PackageHelper.java:157)
第 157 行在代码中突出显示。