【问题标题】:java exception to continue code loopjava异常继续代码循环
【发布时间】:2013-12-17 19:24:19
【问题描述】:

如何恢复下面显示的代码,以便如果第一次尝试出现异常,代码执行仍将继续到第二次尝试。目前,如果我在第一次尝试时遇到异常,则代码不会继续到它下面的下一次尝试。

Calendar facebook_check_post_date = Calendar.getInstance();
facebook_check_post_date.add(Calendar.DAY_OF_MONTH, -4);
long facebook_check_post_Unix_Time = facebook_check_post_date.getTimeInMillis() / 1000;    
String query = "SELECT message,timeline_visibility, created_time   FROM stream WHERE source_id = 187050104663230 AND message AND strlen(attachment.fb_object_type) < 1 AND type != 56 AND type = 46  AND strpos(message, \"prayer time(s)\") < 0 AND strpos(message, \"White days\") < 0 AND strpos(message, \"Hadith of the Day:\") < 0 AND created_time > " + facebook_check_post_Unix_Time + "LIMIT 1";

try 
{
List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class);
facebook_post = queryResults.get(0).getString("message");
facebook_post_visibility = queryResults.get(0).getString("timeline_visibility");
facebook_Label_visible = true;                                      facebook_created_time_calendar.setTimeInMillis(queryResults.get(0).getLong("created_time")* 1000);
out.print("Comment posted on:"); 
out.println(facebook_created_time_calendar.getTime());
}
catch (FacebookException e){Logger.getLogger(JavaFXApplication4.class.getName()).log(Level.SEVERE, null, e);}  

query = "SELECT fan_count FROM page WHERE page_id = 187050104663230";
try 
{
List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class);
facebook_Fan_Count = queryResults.get(0).getString("fan_count");
out.println(facebook_Fan_Count);
}
catch (FacebookException e){Logger.getLogger(JavaFXApplication4.class.getName()).log(Level.SEVERE, null, e);} 

【问题讨论】:

  • 如果它没有到达下一条语句,这意味着你捕获了错误的异常。
  • 不继续是什么意思?它应该继续(除了日志)。第二次尝试有错误吗?
  • 我意识到我没有捕捉到正确的异常

标签: java exception


【解决方案1】:

尝试使用 Exception 而不是 FacebookException:

Calendar facebook_check_post_date = Calendar.getInstance();
facebook_check_post_date.add(Calendar.DAY_OF_MONTH, -4);
long facebook_check_post_Unix_Time = facebook_check_post_date.getTimeInMillis() / 1000;    
String query = "SELECT message,timeline_visibility, created_time FROM stream WHERE source_id =     187050104663230 AND message AND strlen(attachment.fb_object_type) < 1 AND type != 56 AND type = 46      AND strpos(message, \"prayer time(s)\") < 0 AND strpos(message, \"White days\") < 0 AND     strpos(message, \"Hadith of the Day:\") < 0 AND created_time > " + facebook_check_post_Unix_Time + "LIMIT 1";

try 
{
    List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class);
    facebook_post = queryResults.get(0).getString("message");
    facebook_post_visibility = queryResults.get(0).getString("timeline_visibility");
    facebook_Label_visible = true;
    facebook_created_time_calendar.setTimeInMillis(queryResults.get(0).getLong("created_time")* 1000);
    out.print("Comment posted on:"); 
    out.println(facebook_created_time_calendar.getTime());
}
catch (Exception e)    {
    Logger.getLogger(JavaFXApplication4.class.getName()).log(Level.SEVERE, null, e);
}  

query = "SELECT fan_count FROM page WHERE page_id = 187050104663230";
try 
{
    List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class);
    facebook_Fan_Count = queryResults.get(0).getString("fan_count");
    out.println(facebook_Fan_Count);
}
catch (Exception e){
    Logger.getLogger(JavaFXApplication4.class.getName()).log(Level.SEVERE, null, e);
} 

希望对你有帮助

【讨论】:

  • 我认为使用异常 e 而不是特定异常来确保所有内容都被捕获会更安全
  • 在 catch 中显示带有异常详细信息的 ui 通知更加智能
  • 好吧,我看到您使用 JavaFX。在这里您可以找到 PopupWindow 的示例:gist.github.com/jewelsea/1926196 只需将正确的代码放入 catch 块中
  • 使用 e.getMessage() 获取异常详情
【解决方案2】:

您需要将代码放在方法中的第二个 try 块中。 从第一次尝试的 catch 块中调用此方法。

看看这个 Continue Execution even after program catches exception

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2018-03-20
    相关资源
    最近更新 更多