【问题标题】:Java : Catch exception in different threadJava:在不同的线程中捕获异常
【发布时间】:2013-09-23 10:18:04
【问题描述】:

我正在开发一个也使用 REST-API 的 Swing 应用程序。我正在使用 Jersey 来实现这一点。

我希望用户在 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)

所以我的问题是:当我没有引发此异常的对象时,如何“捕获”此异常?

提前致谢!

【问题讨论】:

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


【解决方案1】:

异常在它们被抛出的线程上沿调用堆栈向上传播;他们不交叉线程。如果您想捕获异常,您需要在堆栈跟踪中的某个位置使用您的 try-catch 块,而您没有在问题中发布。

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

【讨论】:

  • 异常发生在org.glassfish.jersey.client 这是一个依赖项,所以我不想更改那里的任何代码。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 2015-08-31
    • 2014-05-20
    • 2010-09-10
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多