Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:全局异常处理程序_Java_Exception_Exception Handling - Fatal编程技术网

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是正确答案。这是几天前在现场向我透露的。正如您所怀疑的,“手动”捕获的异常将永

是否有一种在Java中生成全局异常处理程序的方法。我想这样使用:

"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不应该使用任何线程”意味着你不应该自己创建新线程,因为应用程序无法控制这些线程。使用预配置的线程池是非常好的。