有没有办法在不打印堆栈跟踪的情况下抛出异常?

时间:2012-07-24 16:26:31

标签: java

目标是能够做到:

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)

(例如)。

这可能吗?如果是这样,我将如何做到这一点?

8 个答案:

答案 0 :(得分:3)

您可以通过设置System.setErr(null);

重定向System.err

答案 1 :(得分:3)

由于异常很重要,您可以使用log4j(http://logging.apache.org/log4j/1.2/)之类的日志记录机制,并在不希望出现某些异常时将日志记录设置为其他级别例如,打印或登录到文件而不是控制台。

如果您不关心异常,请抓住它并对其执行任何操作(空捕获,这很糟糕)。

答案 2 :(得分: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);
  }
}

答案 3 :(得分:1)

抓住异常,不要在catch块中放任何东西。

我应该补充一点,这样做通常是一个坏主意。在查找程序中出现的问题时,拥有该堆栈跟踪或某种消息非常有用。

答案 4 :(得分:1)

如果您希望方法在不打印堆栈跟踪的情况下终止程序,请将其放在try / catch块中,并在catch下使用语句:

System.exit(1)

这使系统知道程序以不规则(非零)状态退出,但不向System.err打印任何内容。

答案 5 :(得分:0)

你真正需要做的就是抓住它...但是,这是一个非常糟糕的主意。您可能想要制作自己的例外并抓住它。这样你就不会吞下你不应忽视的异常。你应该真正考虑这样做的唯一一次,就是你不能允许你的应用程序爆炸。如果是这种情况,那么您至少应该记录错误。

This比我更好地解释它(无论如何都是一个很好的资源)。基本上,它表明:

  

“如果可以合理地期望客户从异常中恢复,   成为一个       检查异常。如果客户端无法执行任何操作以从异常中恢复,       使它成为未经检查的例外“。

答案 6 :(得分:0)

像这样:

try {
    some code...
} catch (RuntimeException e) {

  }

答案 7 :(得分:0)

1。 Java compiler 在编译期间只关心您尝试了一下,无论您在catch中实现任何代码还是不

2. 您可以将阻止块清空,或在控制台上打印记录它。等等。 ...

<强>例如

try{

    }catch(Exception ex){



  }

3。printStackTrace()会打印method nameclass namefile nameline number 所在的例外情况已经发生。