为了账号安全,请及时绑定邮箱和手机立即绑定

打印堆栈跟踪说“警告”而不是“错误”

打印堆栈跟踪说“警告”而不是“错误”

汪汪一只猫 2022-06-30 17:59:24
我有这个表示警告而不是异常/错误。new Error("Warning: Callback fired more than once.").printStackTrace(System.err);它看起来像这样:java.lang.Error: Warning: Callback fired more than once.我的问题是,如何创建警告而不是错误,如下所示:new Warning("Warning: Callback fired more than once.").printStackTrace(System.err);以便打印出来:java.lang.Warning: Warning: Callback fired more than once.
查看完整描述

4 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

您应该促进一个日志框架来执行此操作。根据您使用的是哪个,它看起来像logger.warn("Callback fired more then once."). 如果您还需要堆栈跟踪,则可以将其添加到日志消息中。如果没有涉及可能在某些时候变得不方便的日志记录框架,您可以将警告打印到标准输出:System.out.println("Warning: Callback fired more than once.")



查看完整回答
反对 回复 2022-06-30
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您可以创建自己的异常类型


public class Warning extends RuntimeException {

  //override constructors

}

然后你就可以做类似的事情


new Warning("Warning: Callback fired more than once.").printStackTrace(System.err);


查看完整回答
反对 回复 2022-06-30
?
皈依舞

TA贡献1851条经验 获得超3个赞

你不能。

以便打印出来:

java.lang.Warning:

java.lang 包是“密封的”,您不能创建自己的类,这些类存在于该包中。

从这个角度来看,你能做到的最好的事情就是创建你自己的子类RuntimeException,最终得到

your.com.whatever.Warning: Warning

除此之外,其他答案都是正确的:这是一个已解决的问题。你将要重新发明轮子,所以真正的答案是退后一步,研究日志框架,并使用一个。并且首先研究如何使用Java异常,你的代码抛出错误实例是完全错误的!对于严重的错误情况,错误是 JVM 本身抛出的非常糟糕的事情。它们不应该用于代码中的错误,或者您在此处考虑的任何类型的断言。


查看完整回答
反对 回复 2022-06-30
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

不能直接这样做,一种可能的方法是使用记录器:


public static void main(String[] args) {

    java.util.logging.Logger logger = java.util.logging.Logger.getLogger("");

    logger.warning("warn message");

}


查看完整回答
反对 回复 2022-06-30
  • 4 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信