Java:在不同的线程中捕获异常

时间:2013-09-23 10:18:05

标签: java exception exception-handling jersey jersey-client

我正在开发一个也使用REST-API的Swing应用程序。我正在使用泽西来实现这一目标。

我希望用户在TextField中输入一个URL,并希望在URL格式错误或其他任何内容时给他一些反馈。我使用URI作为存储URL的基础,并且能够捕获与此相关的任何问题,并为用户提供一些信息。

 } catch (URISyntaxException ex) {
        MainClass.write2Log("URL wrong : '" + baseURL + "'");
        }

现在,当URL具有正确的格式,但根本没有解决时,我得到了这个例外:

Exception in thread "AWT-EventQueue-0" javax.ws.rs.ProcessingException:
java.net.UnknownHostException: sx.dddsds.ded
at org.glassfish.jersey.client.HttpUrlConnector.
apply(HttpUrlConnector.java:205)

所以我的问题是这样的:当我没有抛出此异常的Object时,如何“捕获”此异常?

提前致谢!

2 个答案:

答案 0 :(得分:2)

异常在调用它们被引入的线程上向上移动;他们不穿越线程。如果您想捕获异常,则需要在堆栈跟踪中的某个位置使用try-catch块,而不是在您的问题中发布。

查看您发布的行,看起来您正在尝试在事件线程上执行长时间运行的操作(HTTP请求);它应该在其他地方运行。

答案 1 :(得分:2)

您可以为特定的(例如当前或任何其他Thread实例)线程设置它,或者为所有未捕获的异常设置全局:

Thread.setDefaultUncaughtExceptionHandler( ... );
Thread.currentThread().setUncaughtExceptionHandler( ...);

通过Thread启动一个新线程,您可以设置异常处理程序,如果您使用executor启动新线程,则可以设置自定义线程工厂,这将设置异常处理程序。