Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中进行SAX解析时捕获与XML无关的异常?_Java_Xml_Exception Handling_Try Catch_Sax - Fatal编程技术网

在Java中进行SAX解析时捕获与XML无关的异常?

在Java中进行SAX解析时捕获与XML无关的异常?,java,xml,exception-handling,try-catch,sax,Java,Xml,Exception Handling,Try Catch,Sax,我没有受过用Java捕获异常的教育,所以这可能是一个很小的问题: 我解析一个XML文件,在endElement的方法中,我有: @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equals("manufacturer")) { newManufacturer = false;

我没有受过用Java捕获异常的教育,所以这可能是一个很小的问题:
我解析一个XML文件,在endElement的方法中,我有:

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {

   if (qName.equals("manufacturer")) {
            newManufacturer = false;
            String venueName = manufacturerBuilder.toString();
            event.setVenueName(venueName);
   }
}
如果事件为null,则我的程序崩溃。我想做的是在这种情况下为有序关机(关闭db连接等)添加一些说明

我当然可以做到:

try{
   event.setVenueName(venueName);
}
catch (NullPointerException e){
   db.close();
//etc
}
但是我在解析器的方法中发现了许多这样的异常。我能不能把try-catch放在一个更高的级别,以便在解析时捕获任何类型的异常(比如上面的异常)?但具体在哪里

方法被调用的事实表明您必须将ContentHandler对象传递给解析或解组操作。将该parse/unmarshal调用放入try/finally块:

try {
    saxParser.parse(source, myHandler);
} finally {
    db.close();
}
即使发生异常,finally块也将始终执行

捕获NullPointerException是一种糟糕的做法。例外情况适用于不应发生的情况。通常,NullPointerException会告诉您在代码中犯了错误

在您的例子中,您似乎将XML文档中的信息存储在
事件
对象中。如果该对象为null,那么即使不存储信息,您真的希望程序继续执行吗

通常情况下,答案是否定的。在这种情况下,如果不捕获异常,您的情况会更好,因此您会意识到您的代码没有执行您希望它执行的任务

如果确实希望继续执行,处理null的正确方法不是让错误(即NullPointerException)发生,而是确保它永远不会发生:

if (event != null) {
    event.setVenueName(venueName);
}