java SAX解析器在工作代码更改后给出NullPointerException

Posted

技术标签:

【中文标题】java SAX解析器在工作代码更改后给出NullPointerException【英文标题】:java SAX parser giving NullPointerException after change in working code 【发布时间】:2011-08-18 02:46:59 【问题描述】:

我正在修改一个应用程序,该应用程序从一个包含测验并显示问题和回复的 XML 文件动态加载数据。更改在于我想加载单个(现在是硬编码)文件而不是使用 JFileChooser。

这是之前工作的相关代码(未定义的变量是类属性,但我不会发布整个类声明):

公共类构造函数() JMenuItem load = new JMenuItem("Load"); ... load.addActionListener(新的 ActionListener() 公共无效actionPerformed(ActionEvent e) 如果(状态 == UNSAVED_CHANGES) if(JOptionPane.showConfirmDialog(gThis , "有未保存的更改。继续?" , "未保存的更改" , JOptionPane.OK_CANCEL_OPTION) == 2) 返回; int returnVal = filePick.showOpenDialog(new JPanel()); 如果(returnVal == JFileChooser.APPROVE_OPTION) 尝试 加载(filePick.getSelectedFile().getCanonicalPath()); 路径名 = filePick.getSelectedFile().getCanonicalPath(); 捕捉(IOException f) System.out.println(f); 设置问题(“q1”); openingLabel.setText(theBase.getDocumentElement().getAttribute("opening")); 状态 = 文件加载; ); 私有静态无效负载(字符串文件名) System.out.println(文件名); 尝试 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(true); DocumentBuilder db = dbf.newDocumentBuilder(); db.setErrorHandler(new DefaultHandler()); theBase = db.parse(fileName); idno = Integer.parseInt(((Element)(theBase.getElementsByTagName("base").item(0))).getAttribute("idno")); System.out.println(idno); 姓氏 = 文件名; 状态 = 文件加载; 捕获(IOException e) System.out.println(e); 捕捉(ParserConfigurationException p) System.out.println(p); 捕捉(SAXException s) System.out.println(s); 公共静态无效设置问题(字符串qid) linkids = 新向量(); 链接=新向量(); qdata = 新向量(); 元素 e = theBase.getElementById(qid); question.setText(e.getAttribute("value")); int 项目 = 0; 节点列表 nl = e.getChildNodes(); for(int i=0; i &lt nl.getLength(); i++) if(nl.item(i).getNodeType() == Node.ELEMENT_NODE) 项目++; qdata.add(((Element)nl.item(i)).getAttribute("content") ); linkids.add(((Element)nl.item(i)).getAttribute("link")); 链接.add((元素)nl.item(i)); 回复.setListData(qdata); thisq = qid;

现在对于不起作用的代码:

公共类构造函数() //JMenuItem load = new JMenuItem("Load"); 加载(“C:\\file.xml”); 路径名 = "C:\\file.xml"; 设置问题(“q1”); openingLabel.setText(theBase.getDocumentElement().getAttribute("opening")); // 我已经删除了 load.addActionListener() 但其余代码没有变化

另外,例外:

线程“主”java.lang.NullPointerException 中的异常

它发生在question.setText(e.getAttribute("value")); 调用setupQuestion("q1");

编辑: 有趣的是,System.out.println(fileName); 在抛出异常之前被打印出来,System.out.println(idno); 在它之后被打印出来。 实际上,在重新启动 IDE 时,两个回显都出现在抛出异常。

我已经坚持了很长一段时间了。非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

找到罪魁祸首。我想我没有提到一切。我忘了为questionreplies 分配内存。我很惭愧。

【讨论】:

“我很惭愧” - 不……我们都会犯错。

以上是关于java SAX解析器在工作代码更改后给出NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SAX 解析器在 XML 中添加元素?

SAX 解析器与 XMLPull 解析器

流式处理和基于树的 XML 解析器在 JAVA 开始时是不是消耗相似数量的内存

在 Java 中使用 SAX 解析器的堆栈溢出错误

JAVA Apache POI 之sax 解析10万级大数量数据

JAVA Apache POI 之sax 解析10万级大数量数据