0

目标是能够做到:

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)

(例如)。

这可能吗?如果是这样,我将如何去做?

4

8 回答 8

3

您可以通过设置重定向 System.errSystem.setErr(null);

于 2012-07-24T16:29:00.213 回答
3

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

如果您只是不关心异常,请捕获它并且什么都不做(空捕获,这很糟糕)。

于 2012-07-24T16:30:41.770 回答
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);
  }
}
于 2012-07-24T18:46:38.163 回答
1

只需捕获异常,不要在 catch 块中放入任何内容。

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

于 2012-07-24T16:27:42.773 回答
1

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

System.exit(1)

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

于 2012-07-24T16:28:42.290 回答
0

你真正需要做的就是抓住它......然而,这是一个非常糟糕的主意。您可能想要创建自己的异常并抓住它。这样你就不会吞下你不应该忽略的异常。您真正应该考虑这样做的唯一时间是,如果您不能让您的应用程序崩溃。如果是这种情况,那么您至少应该记录错误。

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

“如果可以合理地预期客户可以从异常中恢复,则将其设为受检异常。如果客户无法从异常中恢复,则将其设为未受检异常”。

于 2012-07-24T16:28:25.900 回答
0

像这样:

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

  }
于 2012-07-24T16:29:01.103 回答
0

1. Java compiler 只关心在编译期间你是否给了一个 catch 来尝试,无论你是否在 catch 中实现任何代码。

2.您可以将catch块保持为,或者在控制台上打印记录..等等......

例如:

try{

    }catch(Exception ex){



  }

3.printStackTrace()打印method nameclass name发生异常file name的位置。line number

于 2012-07-24T16:34:13.617 回答