Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 如何捕获NoSuchMethodException_Java_Xml_Exception - Fatal编程技术网

Java 如何捕获NoSuchMethodException

Java 如何捕获NoSuchMethodException,java,xml,exception,Java,Xml,Exception,我正在尝试反序列化包含方法的XML文件。 代码段如下所示: XMLDecoder decoder = new XMLDecoder(os); deSerializedObject = decoder.readObject(); decoder.close(); return deSerializedObject; 当XML文件不包含每个对象的方法时。它抛出NoSuchMethodException@readObject java.lang.NoSuchMethod

我正在尝试反序列化包含方法的XML文件。 代码段如下所示:

 XMLDecoder decoder = new XMLDecoder(os); 
    deSerializedObject = decoder.readObject(); 
    decoder.close();
    return deSerializedObject;
当XML文件不包含每个对象的方法时。它抛出NoSuchMethodException@readObject

java.lang.NoSuchMethodException:未找到名为add的方法 位于java.beans.Statement.findMethod(Statement.java:454) 位于java.beans.Statement.invokeMethodImpl(Statement.java:247) 在java.beans.Statement.access$000(Statement.java:46) 在java.security.AccessController.doPrivileged(AccessController.java:284)的java.beans.Statement$1.run(Statement.java:130) 位于java.beans.Statement.invokeMethod(Statement.java:127) 位于java.beans.Expression.getValue(Expression.java:67)的java.beans.xmldecorder$SAXHandler.executeCommon(xmldecommon.java:392) 在java.beans.XMLDecoder$SAXHandler.execute(XMLDecoder.java:321) 位于java.beans.xmldecover$SAXHandler.endElement(xmldecover.java:286) org.apache.xerces.parsers.AbstractSAXParser.endElement(未知源) 位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.ScannedElement(未知 (来源) 位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(未知 (来源) 位于org.apache.xerces.impl.XMLDocumentFragmentScanneImpl.ScandDocument(未知 (来源) 位于org.apache.xerces.parsers.XML11Configuration.parse(未知源) org.apache.xerces.parsers.XML11Configuration.parse(未知源代码)位于 org.apache.xerces.parsers.XMLParser.parse(未知源代码)位于 org.apache.xerces.parsers.AbstractSAXParser.parse(未知源)
位于org.apache.xerces.jaxp.SAXParserImpl$jaxpsaxpasser.parse(未知 源代码)位于org.apache.xerces.jaxp.SAXParserImpl.parse(未知源代码) 位于javax.xml.parsers.SAXParser.parse(未知源代码)处的java.beans.xmldecorder.readObject(xmldecorder.java:662)

问题是我不能抓住这个例外。正确的处理方法是什么

try{
        deSerializedObject = decoder.readObject();
        System.out.println("We are after read object");
        }
        catch (NoSuchMethodException e)
        {
            System.out.println("We are in catch block !!");
            e.printStackTrace();
        }
        decoder.close();
        return deSerializedObject;
这里的错误是“NoSuchMethodException的不可访问的catch块。此异常永远不会从try语句体引发”

XML看起来像

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0" class="java.beans.XMLDecoder">
 <object class="java.util.ArrayList">
  <void method="add">
   <object class="InfoParameters">
    <void property="Name">
     <string>Jay</string>
    </void>
     <void property="Level">
     <string>10</string>
    </void>
   </object>
   <object class="InfoParameters">
    <void property="Name">
     <string>Hir</string>
    </void>
    <void property="Level">
     <string>10</string>
    </void>
   </object>
  </void>
 </object>
</java>

杰伊
10
Hir
10

为什么您不能捕获此异常

XMLDecoder decoder = new XMLDecoder(os); 

try
{
    deSerializedObject = decoder.readObject(); 
}
catch(NoSuchMethodException nsme)
{
    System.err.println(nsme.getMessage());
}
catch(Exception e)
{
    //try me
}

decoder.close();
return deSerializedObject;
如果出于某种原因,“捕获(异常e)”不起作用,请尝试:

try {
    ...
} catch (Throwable t) {
    ...
}

这应该捕获所有可能的异常和错误,因为它是所有异常的基类。

当我放置try{NoSuchMethodException}catch{}块时,编译器说NoSuchMethodException的catch块不可访问。用try{Exception}catch根本就不能捕获。你能发布你想做的事情吗?因为你所说的没有意义。你可以把它贴在你的问题上吗?评论让人很难阅读。你永远不应该这样做。这可能会导致很难找到bug。只有当你真的知道自己在做什么时才应该这样做。他也可以这样做:catch(Throwable t){if(!(t instanceof NoSuchMethodException)){throw t;}}哦,我明白了,因为
readObject()
没有声明抛出
NoSuchMethodException
Java认为这种情况不太可能发生,尝试在
NoSuchMethodException
块之后添加默认异常块。我将把它添加到我下面的帖子中。代码中肯定还有一些你没有发布的东西。根据错误消息
readObject()
不是异常的根本原因,因此它必须来自不同的语句。您可以发布序列化对象的XML版本吗?“一定有什么事情发生了。”亨特添加了XML版本。