Android:如何捕获引用库引发的致命异常?

问题描述:

我正在使用名为'rome-1.0.jar'的引用库。Android:如何捕获引用库引发的致命异常?

try { 
    SyndFeedInput input = new SyndFeedInput(); 
    SyndFeed feed = input.build(new XmlReader(file)); 
} 
catch(Exception e) { 
    Log.e("", "ROME parse error: " + e.toString()); 
} 

input.build(new XmlReader(file));是'rome-1.0.jar'库调用。

虽然我抓住所有异常,我的应用程序仍然崩溃。

05-31 13:43:06.297: W/dalvikvm(11150): threadid=22: thread exiting with uncaught exception (group=0x40a4d1f8) 
05-31 13:43:06.307: E/AndroidRuntime(11150): FATAL EXCEPTION: Thread-4199 
05-31 13:43:06.307: E/AndroidRuntime(11150): java.lang.NoClassDefFoundError: java.beans.PropertyDescriptor[] 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.impl.BeanIntrospector.getPropertyDescriptors(BeanIntrospector.java:39) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.impl.CloneableBean.beanClone(CloneableBean.java:129) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.impl.ObjectBean.clone(ObjectBean.java:87) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.module.DCModuleImpl.clone(DCModuleImpl.java:771) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.module.impl.ModuleUtils.cloneModules(ModuleUtils.java:35) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS090.createSyndEntry(ConverterForRSS090.java:90) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS091Userland.createSyndEntry(ConverterForRSS091Userland.java:85) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS092.createSyndEntry(ConverterForRSS092.java:46) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS093.createSyndEntry(ConverterForRSS093.java:37) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS094.createSyndEntry(ConverterForRSS094.java:58) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS090.createSyndEntries(ConverterForRSS090.java:79) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS090.copyInto(ConverterForRSS090.java:64) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS091Userland.copyInto(ConverterForRSS091Userland.java:49) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.impl.ConverterForRSS094.copyInto(ConverterForRSS094.java:47) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.feed.synd.SyndFeedImpl.<init>(SyndFeedImpl.java:144) 
05-31 13:43:06.307: E/AndroidRuntime(11150): at com.sun.syndication.io.SyndFeedInput.build(SyndFeedInput.java:123) 
...(my code) 

有没有办法解决这个问题?

谢谢库马尔,你给了我一个主意。

我不知道这是一个错误。 我已经处理了OutOfMemoryError,所以我知道我能够处理错误。

try { 
    SyndFeedInput input = new SyndFeedInput(); 
    SyndFeed feed = input.build(new XmlReader(file)); 
} 
catch(Exception e) { 
    Log.e("", "ROME parse error: " + e.toString()); 
} 
catch(Error e2) { 
    Log.e("", "ROME parse error2: " + e2.toString()); 
} 

上面的代码处理错误。我知道这样做不是一个好主意,但它符合我的目的。

谢谢。

这不是一个例外,而是一个错误,其性质比例外更严重。你不应该处理错误。

http://www.coderanch.com/t/269746/java-programmer-SCJP/certification/Error-vs-Exception

如果错误发生时,系统会在大多数的情况下变得不稳定,你真的不能做任何事情。