我使用 Android JavaMail-API 发送电子邮件。一切都按预期工作,但是现在当我的互联网连接不好时,我正在测试一些东西。我通过禁用WIFI然后单击发送电子邮件按钮来执行此操作。
在我的SendMail方法中,我有以下内容:
try{
if(javaMailAPI.send()){
// Do something on success
}
else{
// Do something on fail
}
}
catch(UnknownHostException ex){
// Do something when I have no Internet Connection
}
catch(Exception ex){
// Do something else when I have an other Exception
}
因此,当我在断开WIFI的情况下进行上述测试时,这就是我所期望的:
结果是什么:
07-02 15:00:47.699:W/system . err(6680):javax . mail . messaging exception:未知SMTP主机:smtp.gmail.com;07-02 15:00:47.699:W/system . err(6680):嵌套异常为:07-02 15:00:47.699:W/system . err(6680):Java . net . unknown Host exception:主机未解析:smtp.gmail.com 07-02 15:00:47.699:W/system . err(6680):at com . sun . mail . SMTP . SMTP transport . open server(SMTP transportjavamailapi . send(javamailapi . Java:118)07-02 15:00:47.719:W/system . err(6680):at控制器。email sender . send emails(email sender . Java:58)07-02 15:00:47.719:W/system . err(6680):at activities。ChecklistResultActivity $ 3 . run(ChecklistResultActivity . Java:300)07-02 15:00:47.719:W/system . err(6680):at Java . lang . thread . run(thread . Java:841)07-02 15:00:47.719:W/system . err(6680):原因:java.net.UnknownHostException:主机未解析:smtp.gmail.com 07-02 15:00:47...还有10个
并使用另一个捕获中的代码。
正如您所看到的,它捕获了JavaMail-API的MessagingException,它嵌套了UnknownHostException。
那么,我如何才能捕获嵌套Un
我应该使用这个(来源):
...
catch(Exception ex){
if(ex.getCause() != null && ex.getCause().getCause() instanceof UnknownHostException){
throw new UnknownHostException(ex.getMessage());
}
else{
// Do something else when I have an other Exception
}
}
PS:当我像上面一样抛出未知主机异常时,这个异常会转到这个捕获的异常上面的未知主机异常吗?
我改变了这一点:
try{
if(javaMailAPI.send()){
// Do something on success
}
else{
// Do something on fail
}
}
catch(UnknownHostException ex){
// Do something when I have no Internet Connection
}
catch(Exception ex){
// Do something else when I have an other Exception
}
对此:
try{
if(javaMailAPI.send()){
// Do something on success
}
else{
// Do something on fail
}
}
catch(UnknownHostException ex){
onNoConnection();
}
catch(Exception ex){
// Check if the thrown Exception is a MessagingException with a nested UnknownHostException
if(ex instanceof MessagingException){
if(((MessagingException)ex).getNextException() instanceof UnknownHostException){
onNoConnection();
}
}
else{
// Do something else when I have an other Exception
}
}
private void onNoConnection(){
// Do something when I have no Internet Connection
}
它按预期工作。
我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。
我的RMI服务器接口声明了一个方法foo(),该方法被声明为引发RemoteException和Exception,如下所示: 服务器实现为: 我的客户端在服务器上调用foo: 现在,当我运行客户端时,我得到: 从java类型的foo()中获取异常。rmi。异常异常:未声明的检查异常;嵌套的例外是:java。伊奥。InterruptedIOException:操作超时 Java文档是这样说的。rm
问题内容: Java新手问题: 我需要捕获由第三方组件写入printStream的文本。 PrintStream默认为System.err,但可以更改为另一个PrintStream。 查看文档,我找不到将PrintStream的内容定向到字符串编写器/缓冲区的简单方法。 有人可以帮忙吗? 问题答案:
问题内容: 在有效的Java(第275页)中,有以下代码段: 捕获中断异常以重新引发它有什么用?为什么不让它飞呢? 问题答案: 简单的答案是,这是一个检查的异常,它不在方法(或方法)的签名中。所以你必须抓住它。一旦发现它,建议您设置为设置中断标志。除非您确实打算压缩中断。
问题内容: 我正在尝试编写一个函数wo,您可以通过argparse解析可变数量的参数- 我知道我可以通过做到这一点。可悲的是,argparse帮助的工作方式(以及人们通常在CLI中编写参数的方式)使位置参数处于最后位置。这导致我的位置参数被视为可选参数的一部分。 运行它,如下面的用法说明所示: 但是如果我跑步给我 为了获得正确的参数解析,我必须运行 那么我该如何: 使argparse重新格式化用法
问题内容: 最近,我们在Java服务器应用程序中遇到了一个问题,该应用程序正在抛出未捕获的错误,因为Error是Throwable的一个单独的子类,而我们仅捕获了Exceptions。 我们通过捕获Throwables而不是Exceptions解决了眼前的问题,但这使我思考为什么您要捕获Exceptions而不是Throwables,因为您随后会错过Errors。 那么, 当您可以捕获Throwa