我有以下幾點:NullPointerException異常,而試圖解析XML文件
public static void main(String args[]) {
// upload config' data for program - param' are path and Xml's Root node/ where to get data from
confLoader conf = new confLoader("conf.xml", "config");
System.out.println(conf.getDbElement("dataSource"));
System.out.println(conf.getDbElement("dataSource"));
System.out.println(conf.getDbElement("dataSource")); // Fails
...
這是負責建立DOM和( 'getDbElement()')解析代碼:
public class confLoader{
DocumentBuilderFactory docBuilderFactory;
DocumentBuilder docBuilder;
Document doc;
NodeList nList;
public confLoader(String path, String XmlRoot){
try {
docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilder = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse(new File(path));
// normalize text representation
doc.getDocumentElement().normalize();
nList = doc.getElementsByTagName(XmlRoot);
} catch (Exception e) {
e.printStackTrace();
}
}
public String getDbElement(String element) {
Node nNode = nList.item(0); // 1st item/node - sql
try {
if (nNode.getNodeType() == Node.ELEMENT_NODE) { ///// Line 36 - Problematic
Element eElement = (Element) nNode;
return (((Node) eElement.getElementsByTagName(element).item(0).getChildNodes().item(0)).getNodeValue());
}
} catch (Exception ex) {
System.out.println("Error retrieving " + element + " :" + ex.getMessage());//Thread.dumpStack();
ex.printStackTrace();
}
return "not available";
}
}
堆棧跟蹤給定代碼:
jdbc:mysql://localhost:...
java.lang.NullPointerException
jdbc:mysql://localhost:...
Error retrieving dataSource :null
not available
at exercise.confLoader.getDbElement(confLoader.java:36)
at exercise.Exercise.main(Exercise.java:22)
Line 36 : if (nNode.getNodeType() == Node.ELEMENT_NODE)
xml解析完成兩次,第三次嘗試從xml解析時,我得到NullPointerException。
使用一些println()或者用調試器遍歷代碼來查看哪個對象爲null,然後可以計算出如何修復它。究竟是什麼情況發生?你有沒有堆棧跟蹤? – DNA
也顯示你的堆棧跟蹤。 – basiljames
你在'getDbPath()','getDbUser()'和'getDbPassword()'中看到了一些模式嗎?你認爲你可以做一些改變,只有一種方法?這只是一個提示。 – maba