[英]Is there a way for me to throw an exception without it printing the stack trace?
目标是能够做到:
throw new RuntimeException();
不打印:
Exception in thread "main" java.util.RuntimeException
at grame.GrameManager.add(GrameManager.java:40)
at grame.GrameManager.add(GrameManager.java:47)
at grame.Entity.<init>(Entity.java:56)
at grame.Entity.<init>(Entity.java:28)
at test.Test.main(Test.java:20)
(例如)。
这可能吗? 如果是这样,我将如何去做?
您可以通过设置System.setErr(null);
来重定向System.err System.setErr(null);
由于异常很重要,因此,当您不希望打印某些异常或记录日志时,可以使用log4j(http://logging.apache.org/log4j/1.2/)之类的日志记录机制,并将日志记录设置为其他级别。例如,而不是控制台。
如果您只是不关心该异常,请捕获该异常,而不对其进行任何处理(空捕获,这很糟糕)。
没有抛出的异常直接将堆栈跟踪生成到错误控制台。 这取决于调用它的代码。 对于主程序:
public static void main(String args[]) throws Exception {
// do something that throws an exception
}
如果您没有发现异常,我相信系统会把它吐到控制台上。
在此过程中,您需要处理异常。 如果您想要在GUI中显示它,则必须执行以下操作:
public interface ExceptionHandler {
void handleException(Exception e);
}
public static void main(String args[]) {
ExceptionHandler exceptionHandler = ...;
try {
// something that might throw an exception
}
catch (Exception e) {
exceptionHandler.handle(e);
}
}
只捕获异常,不要在catch块中放入任何东西。
我应该补充一点,这样做通常是个坏主意。 在找出程序中出了什么问题时,具有堆栈跟踪或某种消息非常有用。
如果您希望该方法在不打印堆栈跟踪的情况下终止程序,请将其放在try / catch块中,在catch下只需使用以下语句:
System.exit(1)
这使系统知道程序以不规则(非零)状态退出,但不会将任何内容打印到System.err。
您真正需要做的就是赶上它……但是,这确实是个坏主意。 您可能想自己做一个例外,然后抓住它。 这样,您就不会吞下不应忽略的异常。 您真正应该考虑的唯一时间是,如果您不能让应用程序崩溃。 如果是这种情况,那么您至少应该记录该错误。
这比我能更好地解释它(无论如何都是很好的资源)。 基本上,它表明:
“如果可以合理地期望客户端从异常中恢复,则将其设置为已检查的异常。如果客户端无法采取任何措施从异常中恢复,请将其设置为未检查的异常”。
像这样:
try {
some code...
} catch (RuntimeException e) {
}
1. Java compiler
仅在编译期间关心您是否给出了try捕获 ,无论您是否在捕获中实现任何代码。
2.您可以将catch块保留为空 ,或将其打印在控制台上 ,将其记录下来..etc ....
例如:
try{
}catch(Exception ex){
}
3.但是printStackTrace()
打印发生异常的method name
, class name
, file name
和line number
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.