首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java错误: catch块中引发了新异常,原始堆栈跟踪可能会丢失

Java错误: catch块中引发了新异常,原始堆栈跟踪可能会丢失
EN

Stack Overflow用户
提问于 2011-06-21 12:54:39
回答 6查看 15.9K关注 0票数 4
代码语言:javascript
运行
复制
try {
    // code which throws exception.
} catch (SQLException sqlex) {
    logger.error("Custom message", sqlex);
    **throw new CustomApplicationException("Custom message", sqlex);**
}

在上面的示例中,在粗体的一行上,我得到了PMD错误,因为“在catch块中抛出了新的异常,原始堆栈跟踪可能会丢失”。我知道这个问题已经被问了很多次了,网上也有很多同样的参考资料。我已经尝试了所有可能的方法。但是我仍然不能删除这个PMD错误。请让我知道这个代码片段的错误之处。提前感谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-21 13:41:28

我不认为这段代码有什么问题。

但我也认为,PMD不会/不应该为该代码提供该错误。IIRC,你会得到类似这样的错误:

代码语言:javascript
运行
复制
try {
    // code which throws exception.
} catch (SQLException sqlex) {
    throw new CustomApplicationException("Custom message");  // no cause!
}

您可能使用的是旧版本的PMD,或者有人一直在“改进”您正在使用的PMD规则。

票数 4
EN

Stack Overflow用户

发布于 2020-03-27 17:54:26

需要按如下方式修改异常类,以保留原始堆栈跟踪

代码语言:javascript
运行
复制
try {
    // code which throws exception.
} catch (SQLException sqlex) {
    throw new CustomApplicationException("Any Message", sqlex);
}

CustomApplicationException.java

代码语言:javascript
运行
复制
public class CustomApplicationException extends RuntimeException {

  public CustomApplicationException() {
  }

  public CustomApplicationException(String message) {
    super(message);
  }

  public CustomApplicationException(String message, Throwable cause) {
    super(message, cause);
  }

}
票数 3
EN

Stack Overflow用户

发布于 2011-06-21 13:50:00

代码检查器是用来发现问题的好东西。然而,在这种情况下,您的代码没有问题,而PMD可能保护过度了。请查看PMD中有关该错误的文档,看看是否还有其他您可能需要考虑的问题。然后,如果您仍然对您的代码满意,您可以向它添加一个//NOPMD标记,让PMD忽略该行。我不记得这是自动的,还是您必须配置PMD来查找//NOPMD。

注意,像这样的PMD检查的内联异常也不是真正推荐的,当然也不应该被视为最佳实践。但是,对于像PMD这样的代码检查器,由于某些原因,偶尔会出现一些您想要忽略的标志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6420501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档