如何捕捉NoSuchMethodException
我想反序列化包含方法的XML文件。 片段看起来像:如何捕捉NoSuchMethodException
XMLDecoder decoder = new XMLDecoder(os);
deSerializedObject = decoder.readObject();
decoder.close();
return deSerializedObject;
当XML文件不包含每一个object.It方法抛出NoSuchMethodException @的readObject。
java.lang.NoSuchMethodException:没有与名称添加方法找到 在java.beans.Statement.findMethod(Statement.java:454) 在java.beans.Statement.invokeMethodImpl(Statement.java:247 )java.beans.Statement.access处的 $ java.beans.Statement上的$ 000(Statement.java:46) java.security.AccessController.doPrivileged(AccessController.java:284)处的$ 1.run(Statement.java:130) java.beans.Statement.invokeMethod上的 (Statement.java:127) at java.beans.Expression.getValue(Expression.java:67)at java.beans.XMLDecoder $ SAXHandler.executeCommon(XMLDecoder.java:392) 在java.beans.XMLDecoder $ SAXHandler.execute(XMLD ecoder.java:321) at java.beans.XMLDecoder $ SAXHandler.endElement(XMLDecoder.java:286)at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) at org.apache.xerces.impl .XMLDocumentFragmentScannerImpl.scanEndElement(未知 来源) 在org.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch(未知 来源) 在org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知 来源) 在组织.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)a牛逼 org.apache.xerces.parsers.AbstractSAXParser.parse(来源不明)
在org.apache.xerces.jaxp.SAXParserImpl $ JAXPSAXParser.parse(未知 来源)在org.apache.xerces.jaxp.SAXParserImpl.parse (来源不明) 在javax.xml.parsers.SAXParser.parse(来源不明)在java.beans.XMLDecoder.readObject(XMLDecoder.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>
你为什么不能赶上这个异常?
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;
当我尝试{NoSuchMethoException} catch {}块时,Compiler表示NoSuchMethodException的Unreachable catch块。并尝试{例外}赶上根本不捕捉。 – 2012-03-10 18:54:47
你可以发布你试图做什么?因为你所说的没有意义 – 2012-03-10 19:03:00
你可以在你的问题中发表吗?,这个评论使得它很难阅读。 – 2012-03-10 19:15:03
如果由于某种原因“赶上(例外五)”不工作的尝试:
try {
...
} catch (Throwable t) {
...
}
这应该抓住每一个可能的异常和错误,因为它是所有异常的基类。
你永远不应该那样做。这可能会导致很难发现错误。 – DerMike 2012-03-10 19:09:58
只有当你真的知道自己在做什么时才应该这样做。 他也可以这样做: catch(Throwable t){if(!(t instanceof NoSuchMethodException)){ throw t; } } – 2012-03-10 19:32:55
呵呵我明白了,因为'readObject()'没有被声明为抛出'NoSuchMethodException',Java并不认为这可能发生,所以尝试在'NoSuchMethodException'之后添加一个默认的异常块。我会将它添加到我的帖子下面。 – 2012-03-10 19:26:59
你还没有发布的代码中还有其他内容。根据错误消息'readObject()'不是异常的根本原因,所以它必须来自不同的语句 – 2012-03-10 19:46:43
您可以发布序列化对象的XML版本吗?必须有一些事情发生在那里。 – 2012-03-10 20:07:15