2011-10-12 38 views
1

我的问题很简单。如何强制JAVA终止我编写的任何异常发生时的程序?Java空指针异常不会终止程序

我是使用Swing的currenlty,当引发NullPointer异常时,程序继续在后台运行:以这种方式运行时,我只能从任务管理器关闭它。不好的一点是,当我再次运行相同的程序时,会创建第二个实例,并且我不知道为什么,但是当我有超过1个相同程序的实例时,有一次我得到null异常,下次没有,下一次是的,下一次不是......完全的随机性。

在此先感谢!

回答

1

显然,您的程序似乎至少有一个错误,您可以尝试用调试器解决问题。

至于你的问题,如果它没有被捕获,异常将终止你的程序。所以如果你总是抛出你的异常,包括在主要方法中,当发生异常时会导致程序退出。

然而,随着苹果在评论

说一个Swing应用程序在路上一个事件循环。事件循环捕获Throwable(我相信),所以他不能以正常的方式精确控制被捕获的东西。

+2

一个Swing应用程序有一个事件循环的方式。事件循环捕获了'Throwable'(我相信),所以他无法准确控制以正常方式捕获的东西。 – Mac

+0

很棒@Mac,你为什么不让它成为答案。 – stivlo

+0

我知道问题是什么,但不知道如何解决问题。我只是不想让海报把他的头发拉出来,想知道他如何在事件循环中传播异常,直到他的主要方法。 – Mac

3

This article将是感兴趣的wrt。捕捉异常(理想情况下,您应该消除异常)。

这个想法是,你可以插入代理来包装Swing事件的调用,并捕获任何结果异常。然后,您可以决定要做什么 - 提醒某人,退出等。

+0

@BrianAgnew好找。我以为你可以在Swing中做那样的事情,但不确定。 – Mac

+0

是的,但因为此代码将新事件推送到EDT,而不必在意EDT中的某些事件是否等待,表达,存在或不存在,所以需要测试if(SwingUtilities.isEventDispatchThread()) – mKorbel

0

您应该修复程序中的错误。如果程序没有被捕获,异常会终止程序,你可能会捕捉异常。你总是可以退出程序System.exit(0);