我有一个不小的多线程应用程序与GUI和套接字通信.在开发过程中,我发现有时会有一些异常没有被捕获和记录.如果有的话,我必须盯着控制台才能得到它们.
有没有办法在一个地方捕获来自不同线程(包括EDT)的未捕获的异常,在main()中说,并记录它们?我在main()中放了一个try-catch 来捕获Throwable,但它不起作用.
编辑:
更具体的,我有Executors.newCachedThreadPool()与Runnable接口秒.我不想在很多情况下使用Callable,因为我不想阻止我的调用线程.那么如何从Runnables中捕获异常?
同时,我怎么能赶上ü ncaught例外,从摇摆EDT?
我建议使用方法Thread.setDefaultUncaughtExceptionHandler为未捕获的异常设置UncaughtExceptionHandler类型的自定义处理程序.当线程由于未捕获的异常而即将终止时,JVM将调用此处理程序.
Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> { System.out.println(t + " throws exception: " + e); });
UPD:
至于摇摆EDT情况下,我觉得这是很好的答案在这里.