繁体   English   中英

我有办法在不打印堆栈跟踪的情况下引发异常吗?

[英]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 nameclass namefile nameline number

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM