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