【发布时间】:2014-04-03 16:13:21
【问题描述】:
我需要抛出一个异常。唯一的问题是异常是从方法内启动的线程引发的。
这是我的意思的一个例子:
public void connectToWebsite(String URL){
new Thread(){
@Override
public void run(){
openURLConnection(URL);//Throws Malformed URL and IO Exception
}
};
}
这是 API 的一部分,所以我想让 API 的用户按照他们的选择来处理异常。但是,我无法让connectToWebsite(url) 抛出异常,因为异常是在运行中抛出的。我无法让run() 抛出异常,因为它不会覆盖 run 方法。有没有一种方法可以在不构建整个新线程类的情况下引发异常?还是我应该只用printStackTraces 添加一个捕获?
理想情况下,我希望connectToWebsite 引发异常并让用户处理它。然而,这甚至可能吗?如果是这样,怎么做?如果我不能或不应该抛出异常,我应该如何通知用户出了问题?
【问题讨论】:
-
你写哪个API声明抛出异常,在方法上使用
-
book.javanb.com/java-threads-3rd/jthreads3-CHP-13-SECT-5.html 刚刚发现。看看它。未捕获的异常通过可重写的方法进行处理。发生异常的线程作为参数传递给此处理程序。
-
正如@Thüzhen 建议的那样,有一个默认的异常处理程序可以“捕获”异常,使其一直到线程的根框架而不被处理。应用程序开发人员可以(如果 JVM 权限规则未禁止)更改此处理程序以执行开发人员的投标。
标签: java multithreading exception