這篇文章給大家分享的是有關SwingWorker如何增強異常處理的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
新的SwingWorker支持超時,這是通過覆蓋getTimeout()方法已返回一個非零值來實現的。當超出超時時間,worker線程會被中斷。
如果想查看使用超時的例子,請參閱注釋版的getTimeout()方法和DynamicTree如何處理TimeoutException。
超時功能是用TimedCallable來實現的,其中使用了FutureResult的timedGet()方法。
增強的異常處理
construct()方法拋出的任何東西都會被記錄。除了死循環和死鎖,新的異常處理確保了SwingWorker處于“準備好”的狀態。也就是說,它要么得到一個正確的結果,要么得到一個異常。
下面的get()方法用來取出結果。這個方法繼承自FutureResult:
◆publicObjectget()
◆throwsInvocationTargetException,InterruptedException
如果construct()拋出一個Exception,get()方法就會拋出InvocationTargetException。要獲得construct()方法實際上拋出的異常,可以調用getTargetException()進行異常處理。
如果取結果的線程在等待結果的過程中被中斷,get()方法會拋出InterruptedException——但這種情況對SwingWorker來說很罕見,因為取結果的線程通常都是事件派發線程,并且在finished()會被調用以前,結果總是已經準備好的。
更多調用工具
SwingWorker的實現在jozart.swingutils包中。在同一個包里,你還能找到InvokeUtils類,這個類還提供了幾個invokeXXX()方法。后臺線程可以用這些方法來在事件派發線程中獲取值和用戶輸入,再把結果返回到后臺線程。
感謝各位的閱讀!關于“SwingWorker如何增強異常處理”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。