2012-07-24 315 views
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

1.抓住它2.忽略它。 – assylias 2012-07-24 16:27:11

+0

你为什么要这样做?这通常不是一件好事 – 2012-07-24 16:30:09

+0

我应该详细阐述我的意图。我正在制作一个异常捕获器,它在一个整洁的GUI中显示问题,甚至让用户通过电子邮件发送日志。事情是,有时导致异常的程序会继续运行,因为实际上,当我调用我的“异常管理器”时,它会捕获并忽略异常。我想我的问题是:是否有任何方法来停止程序(就像抛出异常一样)而不终止它(并且使它全部不可见,如在没有控制台打印的情况下)? – 2012-07-24 18:31:45

回答

3

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

如果你只是不在乎异常,赶上它,什么也不做(空捕获,这是可怕的)。

+0

+1 – 2012-07-24 18:41:38

1

只要发现异常,并且不要在catch块中放入任何东西。

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

+0

是的,我知道。我问,因为我正在制作一个(非常棒的)异常捕获器(使用GUI和内置的电子邮件程序)。有时候我想停止这个程序,这样捕获器就可以运行,那就是当我抛出异常(我想隐藏的时候)。 – 2012-07-24 18:27:57

0

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

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

“如果一个客户可以合理预期从异常恢复, 使其成为 检查异常,如果客户不能做任何事情,从异常中恢复, 使其成为未经检查的例外“。

1

如果你想方法杀程序,而不打印堆栈跟踪,将其放置在一个try/catch块,并在捕捉只需使用语句:

System.exit(1) 

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

3

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

0

像这种重定向System.err的:

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

    } 
+0

你真的不应该这样做 – 2012-07-24 16:37:00

+0

为什么我真的不应该这样做? – jrad 2012-07-24 16:44:18

+2

运行时异常仅在代码中存在错误(类转换,空指针等)时才会引发。这些不是应该被吞噬的东西。你应该修正你的代码,以免出现这些问题。你应该这样做的唯一时间是如果你不能让你的应用程序爆炸,但绝对不是一般情况。 – 2012-07-24 16:49:26

0

Java compiler你给一个抓一个尝试,无论你实现在catch或没有任何代码在编译期间只在乎。

2。你可以保持catch块,或打印在控制台日志it..etc上....

如:

try{ 

    }catch(Exception ex){ 



    } 

printStackTrace()打印出现异常的method name,class name,file nameline number

1

没有引发异常直接生成堆栈跟踪到错误控制台。代码是由谁来调用的。在主程序的情况下:

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); 
    } 
} 
相关问题