Android/Java-未捕获异常

Android/Java-未捕获异常,java,android,exception,Java,Android,Exception,我的try/catch块似乎神秘地没有捕获异常。以下是相关的代码片段 这是类搜索器中的try/catch块。它尝试创建一个网页对象,然后添加到hashmap。如果在流程中引发异常,它将取消该操作 try { Webpage directSite = new Webpage(directURL); Log.i("tester", "Made object directSite"); addSite(directSite); Log.i("tester", "Adde

我的try/catch块似乎神秘地没有捕获异常。以下是相关的代码片段

这是类搜索器中的try/catch块。它尝试创建一个网页对象,然后添加到hashmap。如果在流程中引发异常,它将取消该操作

try {
    Webpage directSite = new Webpage(directURL);
    Log.i("tester", "Made object directSite");
    addSite(directSite);
    Log.i("tester", "Added to Hashmap");

} catch (IllegalArgumentException e) {
    Log.i("tester", "URL.com had illegal argument exception");
    e.printStackTrace();

} catch (WikipediaException e) {
     Log.i("tester", "URL.com had Wikipedia exception");
     e.printStackTrace();

} catch (ResourceNotFoundException e) {
     Log.i("tester", "URL.com had resource not found exception"); // If 404 error or similar thing happened.
     e.printStackTrace();

} catch (NetworkException e) {
    Log.i("tester", "URL.com had illegal argument exception");
    e.printStackTrace();
    activity.connectionFailure();
}
下面是网页构造器的相关片段,它接收URL并从该站点检索一些数据

result = wizard.execute(CDX_query);
Log.i("tester","wizard response is: \'" + result + "\'");


if(result.equals("HTTP FAILED")){ // If connection error occurs, raise exception.
    Log.i("tester", "Webpage threw network exception");
    throw new NetworkException("ERROR: Network failure");

} else if(result.equals("SEARCH FAILED") ||result.equals("")){ // If resource could not be found, raise exception.
    Log.i("tester", "Webpage threw ResourceNotFoundException");
    throw new ResourceNotFoundException("ERROR: Could not find that resource");

} else{
    // Do the regular things
}
我在一个故意导致404错误的网站上尝试过。据我所知,我预计会发生这种情况:

搜索者确实尝试阻止。尝试创建新网页。 网页从向导中获取结果向导类执行HTTP操作,工作正常 结果显示搜索失败,因此网页进入相关的“else if”块。 网页日志网页引发ResourceNotFoundException。 网页抛出ResourceNotFoundException,停止执行。已停止构建,并且未生成网页对象。 Searcher在相关的catch块中捕获ResourceNotFoundException。 搜索者日志URL.com有资源未找到异常。 最重要的是,没有生成网页对象,并且try块的其余部分没有执行,因此没有向Hashmap添加任何内容。 如果真的发生了这种情况,该应用程序将运行良好,因为稍后在Searcher中会出现几乎相同的try/catch块,这在处理404时非常有效。这就是我如何知道网页和向导在我做的其他测试中正常工作的原因

然而,实际结果是应用程序崩溃,日志看起来像这样,并过滤了“tester”标记:

wizard response is: 'SEARCH FAILED' // Makes sense.
Webpage threw ResourceNotFoundException // Makes sense. Means the ResourceNotFoundException was indeed thrown.
Made object directSite // Against expectation! Shouldn't do this!
Added to Hashmap // Against expectation! Shouldn't do this!
注意,缺少message URL.com had resource not found异常,因此搜索者不知何故没有捕获异常,并继续执行try块

我已经调查并查明了坠机的原因,现在又回到了这个问题上。稍后,一些代码遍历hashmap并读取其对象的数据。但是,由于没有从不存在的网站读入数据,因此此特定网页对象的字段为空,因此会导致NullPointerException。根据我的理解,如果一开始就没有创建网页对象并将其添加到哈希映射中,那么就可以避免这种情况。这就是为什么我有异常抛出和try/catch块,如果网页在这个过程中抛出异常,就停止对象构造并添加到哈希映射。在本例中,Webpage确实抛出了它,但块构造并将错误对象添加到hashmap中。 那么,为什么街区没有抓住它?
另外,它也无法捕获网络异常,因为我在关闭Wi-Fi的情况下运行它,发生了几乎相同的事情,正确的异常被抛出,但未被捕获

我不确定如何使用您提供的信息修复此问题,也许有经验的人会知道,因此,您是否介意尝试以下操作:1尝试总是在构造函数中抛出异常抛出新的RuntimeException作为第一行。2尝试在活动创建中运行构造函数,而不是在某些深度嵌套的函数中运行。3您是否尝试过通过调试器运行它并单步执行代码?也许这会显示一些结果。我会在构造函数中寻找另一个try/catch块。这可能是因为它扔得很好,但随后却被悄悄地抓住,让它继续前进并引发问题。我们有机会看到完整的构造器吗?谢谢@OblivionCreations!这确实是问题所在。你减轻了我的沮丧: