[英]How does one throw an exception from a thread?
我需要拋出一個例外。 唯一的問題是,異常是從從方法內部啟動的線程拋出的。
這是我的意思的示例:
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方法。 有沒有一種方法可以在不構建整個新線程類的情況下引發異常? 還是我應該只考慮使用printStackTrace
添加一個捕獲?
理想情況下,我希望connectToWebsite
引發異常並讓用戶處理它。 但是,那有可能嗎? 如果是這樣,怎么辦? 如果我不能或不應該拋出異常,應該如何通知用戶出了什么問題?
有沒有一種方法可以在不構建整個新線程類的情況下引發異常? 還是我應該只考慮使用printStackTraces添加一個功能?
您可以做幾件事。 最好的辦法是切換為使用ExecutorService
並使用Callable
而不是runnable。 您可以將Callable
提交給ExecutorService
,該服務返回Future
。 當您調用future.get()
,如果您的call()
方法引發了異常,它將引發異常。 它實際上拋出ExecutionException
並且該異常的原因將是call()
拋出的異常。
您還可以使用UncaughtExceptionHandler
並將其設置在Thread
。 然后,如果線程拋出異常,則將調用異常處理程序。
Runnable
不能引發異常或返回值。
可以做的一件事就是讓openURLConnection
創建的openURLConnection
為null。 因此用戶將檢查
if (object == null) { /* something went wrong with url connection */ }
else {
/* all ok */
}
並知道是否出了問題。
這取決於您的API的工作方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.