Java:全局异常处理程序
是否有一种在Java中生成全局异常处理程序的方法。我想这样使用:Java:全局异常处理程序,java,exception,exception-handling,Java,Exception,Exception Handling,是否有一种在Java中生成全局异常处理程序的方法。我想这样使用: "When an exception is thrown somewhere in the WHOLE program, exit." 处理程序可能无法捕获try-catch正文中抛出的异常 玛蒂恩使用。有关示例,请参阅罗德·希尔顿的“”博文。您可以设置,当整个系统出现异常时,将使用该设置 DefaultUncaughtExceptionHandler是正确答案。这是几天前在现场向我透露的。正如您所怀疑的,“手动”捕获的异常将永
"When an exception is thrown somewhere in the WHOLE program, exit."
处理程序可能无法捕获try-catch
正文中抛出的异常
玛蒂恩使用。有关示例,请参阅罗德·希尔顿的“”博文。您可以设置,当整个系统出现异常时,将使用该设置 DefaultUncaughtExceptionHandler是正确答案。这是几天前在现场向我透露的。正如您所怀疑的,“手动”捕获的异常将永远不会被该处理程序捕获。然而,我得到了以下警告: ***为了与J2EE兼容,webapp不应使用任何线程。**
当我对照良好实践和推荐的IDE插件java编码风格检查了我的项目后。为了澄清,对于独立java应用程序或对于您确定有一个定义良好的线程入口点的实例,请使用setDefaultUncaughtExceptionHandler 对于没有定义好的线程入口点的实例,例如,当您在web服务器或应用程序服务器上下文或其他框架中运行时,安装和拆卸是在代码之外处理的,请查看该框架如何处理全局异常。通常,这些框架都有自己建立的全局异常处理程序,您可以参与其中,而不是定义
有关更详细的讨论,请参见以下示例,该示例用于处理任何未捕获的异常:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
LoggerFactory.getLogger("CustomLogger").error("Uncaught Exception in thread '" + t.getName() + "'", e);
System.exit(1);
}
});
这也可以使用线程在每个线程上完成。setDefaultUncaughtExceptionHandler()可以工作,但并非在所有情况下都可以。例如,我在创建Swing小部件之前在main()中使用它,它在Swing创建的线程中工作,例如AWT事件线程或SwingWorker线程
遗憾的是,使用JavaSE 1.6使用LDAP URL时,它对javax.naming.spi.NamingManager.getInitialContext()创建的线程没有任何影响。毫无疑问还有其他例外。“-为了符合J2EE,Web应用程序不应该使用任何线程。”-我不知道这一点。你的意思是servlet中的service()(和doGet()、doPost()等)方法不应该产生新线程吗?我不知道这意味着什么,因为我的应用程序不是基于web的。我在谷歌上搜索了一段时间,但我没有找到任何答案,我很震惊。除了像这样的警告或“变量名太短”或“变量名太长”,我发现PMD是一个伟大的灵感来源。我强烈推荐它。我做了一些深入的研究,显然你不能直接在J2EE中创建线程。我找到了几个链接:谢谢,@Kolibri.No严肃的web应用程序只在一个线程上运行。“webapp不应该使用任何线程”意味着你不应该自己创建新线程,因为应用程序无法控制这些线程。使用预配置的线程池是非常好的。