【问题标题】:Android: How to catch Fatal Exception thrown from a referenced library?Android:如何捕获从引用库抛出的致命异常?
【发布时间】:2012-06-06 00:16:33
【问题描述】:

我正在使用一个名为“rome-1.0.jar”的引用库。

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)

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

【问题讨论】:

    标签: android exception try-catch


    【解决方案1】:

    谢谢 Kumar,你给了我一个想法。

    我不知道这是一个错误。 我之前处理过 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());
    }
    

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

    谢谢。

    【讨论】:

      【解决方案2】:

      这不是异常,而是错误,其性质比异常更严重。你不应该处理错误。

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

      如果发生错误,系统在大多数情况下会变得不稳定,你真的无能为力。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-01
        • 2011-05-07
        • 2010-12-16
        • 2011-06-27
        • 2013-06-24
        • 2012-07-27
        • 2011-11-11
        • 1970-01-01
        相关资源
        最近更新 更多