Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java未捕获异常_Java_Logging_Exception Handling_Stack Trace_Java1.4 - Fatal编程技术网

Java未捕获异常

Java未捕获异常,java,logging,exception-handling,stack-trace,java1.4,Java,Logging,Exception Handling,Stack Trace,Java1.4,不幸的是,我无法控制getUserByUserIdString。它的行为方式是,如果找到用户,则返回用户;如果找不到用户,则抛出OntNoObject ExistsException。我的问题是,出于某种原因,catch在抛出时没有捕获OnNotObjectExistsException 此异常的类型层次结构是:OntNoObjectExistsException->OntException->exception->Throwable 我尝试了这段代码来测试水域,但问题仍然存在。注意,我正在抓到

不幸的是,我无法控制getUserByUserIdString。它的行为方式是,如果找到用户,则返回用户;如果找不到用户,则抛出OntNoObject ExistsException。我的问题是,出于某种原因,catch在抛出时没有捕获OnNotObjectExistsException

此异常的类型层次结构是:OntNoObjectExistsException->OntException->exception->Throwable

我尝试了这段代码来测试水域,但问题仍然存在。注意,我正在抓到一次性的

这是stacktrace:


还要注意,这是Java1.4。还有一个我现在无法控制的问题。

在抛出新Throwable的超类中捕获异常。

在抛出新Throwable的超类中捕获异常。

我同意另一个答案,即在流控制中使用异常是非常糟糕的做法,但实际上是为了回答您的问题你有没有试着抓住可丢弃的而不是例外

catch (Throwable t) {
    // handle here.
}

我同意另一个答案,即在流控制中使用异常是非常糟糕的做法,但要真正回答您的问题,您是否尝试捕捉Throwable而不是Exception

catch (Throwable t) {
    // handle here.
}

让我提出一个假设。WebUser.getUserByUserId包含以下代码:

if (userNotFoundCondition) {
  OntNoObjectExistsException e = new OntNoObjectExistsException("User not found");
  logger.error("User not found", e);
  throw e;
}

这一假设与您提交的所有证据100%一致。为了继续你的调查,你必须首先反驳这个假设。

让我提出一个假设。WebUser.getUserByUserId包含以下代码:

if (userNotFoundCondition) {
  OntNoObjectExistsException e = new OntNoObjectExistsException("User not found");
  logger.error("User not found", e);
  throw e;
}
这一假设与您提交的所有证据100%一致。为了继续你的调查,你必须首先反驳这个假设。

你无法控制getUserByUserId;但是,它似乎在同一个包com.bcbst.dsmart.api中,因此这个答案假设继续进行它不在同一个项目中您的责任范围之内,但是您有它的源文件

getUserByUserId所属类的源与运行时使用的编译版本之间是否存在不匹配

如果throws语句在编译后在该类中被修改,或者异常本身被更改,这可以解释您的这种明显荒谬的情况

有关该假设的更多信息,请参见

=>重新编译所有内容并重新部署。

您无法控制getUserByUserId;但是,它似乎在同一个包com.bcbst.dsmart.api中,因此这个答案假设继续进行它不在同一个项目中您的责任范围之内,但是您有它的源文件

getUserByUserId所属类的源与运行时使用的编译版本之间是否存在不匹配

如果throws语句在编译后在该类中被修改,或者异常本身被更改,这可以解释您的这种明显荒谬的情况

有关该假设的更多信息,请参见



=>重新编译所有内容,然后重新部署。

在您的WebUser类中导入的异常的完整包名是什么?检查您只有一个OntNoObjectExistsException,并且它就是您正在捕获的。FWIW,我尝试将捕获减少为一个一次性捕获,但问题仍然存在。@dharga这非常重要,确保你编辑了你的问题以清晰地突出显示。无论你的问题是什么,从你发布的代码中都看不出来。您是否检查了堆栈跟踪中的行号以确保它是从您认为的位置抛出的?WebUser类中导入的异常的完整包名是什么?检查您只有一个OntNoObjectExistsException,并且它是您正在捕获的。FWIW,我尝试将捕获减少为一个可丢弃的捕获,问题依然存在。@dharga这很重要,请确保编辑您的问题以清楚地突出显示。无论您的问题是什么,从您发布的代码中都看不出来。你有没有检查堆栈跟踪中的行号,以确保它是从你认为的地方抛出的?引用OP:FWIW,我试图减少到一个单一的捕获丢弃,问题是persisted@Ben这可能是一个更好的评论。引用OP:FWIW,我试图减少到一个单一的捕获丢弃,问题是什么persisted@Ben作为一个注释,这可能更好。你能对这个答案进行一点扩展吗?@Duncan要解释什么,请看引发异常的stacktrace。它可能是RuntimeException rethrown或stacktrace。我认为毫无疑问,超类方法引发了异常。问题是OP为什么不能捕获异常。您关于rethrown RuntimeException的最后一条评论很有意思。这是来自JavaDoc的:一个方法不需要在其throws子句中声明任何可能在这个过程中抛出的RuntimeException子类
方法的执行,但未被捕获。它不是RuntimeException的子类。我发布了类型层次结构。你能对这个答案进行一点扩展吗?@Duncan要解释什么,请看引发异常的stacktrace。它可能是RuntimeException rethrown或stacktrace。我认为毫无疑问,超类方法引发了异常。问题是OP为什么不能捕获异常。您关于rethrown RuntimeException的最后一条评论很有趣。这是来自JavaDoc的:方法不需要在其throws子句中声明在方法执行期间可能抛出但未捕获的RuntimeException的任何子类。它不是RuntimeException的子类。我发布了类型层次结构。足够近了。投掷后,它被捕获,例如printStackTrace,然后重新投掷。为了您的帮助,我选择了这个答案。@dharga如果它被重新调用,它一定会被子类代码捕获。这甚至超出了我的想象。写这篇文章的人显然不知道你可以实例化一个异常而不立即抛出它。我很清楚,但是根本没有想到它。因此,为什么我相信你的解决方案,因为你是我想到它的人。不,我的意思是为什么他写try{throw new OntNoObjectExistsException;}catch OntNoObjectExistsException e{e.printStacktrace;throw e;}当他可以简单地说OntNoObjectExistsException e=new OntNoObjectExistsException;e、 打印跟踪;扔e;。够近了。投掷后,它被捕获,例如printStackTrace,然后重新投掷。为了您的帮助,我选择了这个答案。@dharga如果它被重新调用,它一定会被子类代码捕获。这甚至超出了我的想象。写这篇文章的人显然不知道你可以实例化一个异常而不立即抛出它。我很清楚,但是根本没有想到它。因此,为什么我相信你的解决方案,因为你是我想到它的人。不,我的意思是为什么他写try{throw new OntNoObjectExistsException;}catch OntNoObjectExistsException e{e.printStacktrace;throw e;}当他可以简单地说OntNoObjectExistsException e=new OntNoObjectExistsException;e、 打印跟踪;扔e;。
if (userNotFoundCondition) {
  OntNoObjectExistsException e = new OntNoObjectExistsException("User not found");
  logger.error("User not found", e);
  throw e;
}