Ich habe eine nicht kleine mehrere Threads Anwendung mit GUI und Socket-Kommunikation. Während der Entwicklung fand ich manchmal, dass es einige Ausnahmen gibt, die nicht gefangen und protokolliert werden. Ich muss auf die Konsole starren, um sie zu holen, wenn es welche gibt.Wie werden alle nicht abgefangenen Ausnahmen von verschiedenen Threads während der Entwicklung an einer Stelle abgefangen?
Gibt es eine Möglichkeit, diese nicht abgefangenen Ausnahmen von verschiedenen Threads (einschließlich EDT) an einem Ort zu fangen, in main() zu sagen, und sie zu protokollieren? Ich stelle einen Versuch-Catch in Haupt(), um die Throwable zu fangen, aber es funktioniert nicht.
EDIT:
Speziellere, ich habe Executors.newCachedThreadPool() mit Runnable s. Ich möchte nicht Callable in vielen Fällen verwenden, weil ich nicht meinen Anruf Thread blockieren möchte. Wie kann ich dann Ausnahmen von diesen Runnables abfangen?
Und auch, wie kann ich fangen u ncaught Ausnahme vom Swing-EDT?
Verwenden Sie einen Thread.UncaughtExceptionHandler wie in [dieser Frage] (http://stackoverflow.com/questions/6546193/how-to-catch-an-exception-from-a-thread) – DaniEll
uhm ... warum tun Sie denken, dass Callable den Calling-Thread blockiert? Das macht überhaupt keinen Sinn, es ist so, als ob Bananen wegen ihres Geschmacks die Erderwärmung verursachen ... "Callable" ist eine "funktionale Schnittstelle" und kann auf viele Methodensignaturen angewendet werden - das hat nichts mit blockierenden Operationen zu tun. .. überhaupt. "Callable" blockiert nur, wenn der Aufrufer keine Threads verwendet - das Austauschen des Callable für ein Runnable ändert das nicht. – specializt