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
6 answers
Użyj Wątku.setDefaultUncaughtExceptionHandler . Zobacz przykładowy post na blogu Roda Hiltona "Global Exception Handling".
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.
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)
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/
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.
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.
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