Java: Global Exception Handler

Czy istnieje sposób na utworzenie globalnego programu obsługi wyjątków w Javie. Chcę używać tak:

"When an exception is thrown somewhere in the WHOLE program, exit."

Opiekun nie może wyłapywać WYJĄTKÓW wrzucanych do Ciała try-catch.

Martijn

Author: Martijn Courteaux, 2009-10-10

6 answers

Użyj Wątku.setDefaultUncaughtExceptionHandler . Zobacz przykładowy post na blogu Roda Hiltona "Global Exception Handling".

 55
Author: bobbymcr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-10 17:12:02

Możesz ustawić domyślną funkcję UncaughtExceptionHandler , która będzie używana, gdy wyjątek propeguje uncaught w całym systemie.

 4
Author: Kolibri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-10 17:14:02

Oto przykład, który używa Logback do obsługi wszelkich nieobciążonych WYJĄTKÓW:

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);
    }
});

Można to również zrobić na zasadzie per-thread za pomocą Thread.setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler)

 3
Author: Brad Mace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-13 23:49:35

Dla wyjaśnienia użyj setDefaultUncaughtExceptionHandler dla samodzielnych aplikacji Java lub dla przypadków, w których masz pewność, że masz dobrze zdefiniowany punkt wejścia dla wątku.

W przypadkach, w których nie masz dobrze zdefiniowanego punktu wejścia dla wątku, na przykład, gdy uruchomisz serwer WWW lub serwer aplikacji lub inny framework, w którym konfiguracja i tearddown są obsługiwane poza kodem, sprawdź, jak ta framework obsługuje globalne wyjątki. Zazwyczaj te struktury mają własne ustanowione globalne procedury obsługi wyjątków, w których użytkownik staje się uczestnikiem, a nie definiuje.

Aby uzyskać bardziej rozbudowaną dyskusję, zobacz http://metatations.com/2011/11/20/global-exception-handling-in-java/

 2
Author: Clifford Oravec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-20 17:17:50

DefaultUncaughtExceptionHandler jest poprawną odpowiedzią. Zostało mi ujawnione przez Jeffa Storeya w Tej lokalizacji, kilka dni temu. Jak podejrzewaliśmy, "ręcznie" przechwycone wyjątki nigdy nie zostaną przechwycone przez ten program obsługi. Jednak dostałem następujące ostrzeżenie:

* * - aby być zgodne z J2EE, webapp nie powinien używać żadnego wątku.**

Po sprawdzeniu mojego projektu pod kątem dobrych praktyk i zalecanego stylu kodowania w Javie za pomocą wtyczki PMD dla Eclipse IDE.

 0
Author: hypercube,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:15

Threads.metoda setDefaultUncaughtExceptionHandler działa, ale nie we wszystkich przypadkach. Na przykład używam go w main() przed tworzeniem widżetów Swing i działa w wątkach utworzonych przez Swing, takich jak wątek zdarzenia AWT lub wątki SwingWorker.

Niestety, nie ma to żadnego wpływu na wątek stworzony przez javaxa.nazewnictwo.spi.NamingManager.getInitialContext () podczas używania adresu URL LDAP, przy użyciu JavaSE 1.6. Bez wątpienia są inne wyjątki.

 0
Author: Jeff Learman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-26 18:11:35