簡體   English   中英

一個人如何從線程拋出異常?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM