如果某些方法從EDT線程調用未經檢查的異常,會發生什麼情況?它是否支持GUI的響應或什麼?謝謝EDT和運行時異常
2
A
回答
4
默認情況下,如果未捕獲到異常,堆棧跟蹤將被寫入控制檯輸出。整個圖形用戶界面並沒有變得沒有反應(但是,正如垃圾評論所述,特定組件可以保持在一種不自然的狀態),EDT繼續工作:Does the EDT restart or not when an exception is thrown?
好的做法是設置一個未捕獲的異常處理程序,因爲你想知道是否出了問題。需要注意的是(取決於Java版本),這可能具有不同的功能爲EDT比其他線程:
How can I detect when an Exception's been thrown globally in Java?
注意「sun.awt.exception.handler」的把戲,在很多SO帖子中提到,不是必需的,並且在Java 7中不起作用。對於Java 7,只需使用標準的Thread.setDefaultUncaughtExceptionHandler。當然,如果您使用這兩種機制來註冊異常處理程序,代碼將在所有版本中運行。
5
在重新啓動之前,EDT是否會關閉以前顯示的所有組件?
不,美國東部時間剛恢復執行Runnable
實例,就像以前一樣;破壞Runnable
s繼續拋出異常。作爲練習,請在調試器中檢查example cited。
附錄:這是一個典型的堆棧跟蹤,從這個example。
chart.DTSCTest$1.actionPerformed(DTSCTest.java:53) javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) java.awt.Component.processMouseEvent(Component.java:6373) javax.swing.JComponent.processMouseEvent(JComponent.java:3267) java.awt.Component.processEvent(Component.java:6138) java.awt.Container.processEvent(Container.java:2085) java.awt.Component.dispatchEventImpl(Component.java:4735) java.awt.Container.dispatchEventImpl(Container.java:2143) java.awt.Component.dispatchEvent(Component.java:4565) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212) java.awt.Container.dispatchEventImpl(Container.java:2129) java.awt.Window.dispatchEventImpl(Window.java:2478) java.awt.Component.dispatchEvent(Component.java:4565) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:679) java.awt.EventQueue.access$000(EventQueue.java:85) java.awt.EventQueue$1.run(EventQueue.java:638) java.awt.EventQueue$1.run(EventQueue.java:636) java.security.AccessController.doPrivileged(AccessController.java) java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) java.awt.EventQueue$2.run(EventQueue.java:652) java.awt.EventQueue$2.run(EventQueue.java:650) java.security.AccessController.doPrivileged(AccessController.java) java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) java.awt.EventQueue.dispatchEvent(EventQueue.java:649) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
相關問題
- 1. 運行時異常
- 2. 運行時異常
- 3. 運行時異常
- 4. 運行時異常/空指針異常
- 5. 運行時異常 - Datanucleus和GAE
- 6. 運行時異常運行android uiAutomator
- 7. 運行時異常的Android
- 8. 泛型運行時異常
- 9. 錯誤異常運行時
- 10. 運行時BadImageFormat異常
- 11. Java運行時異常
- 12. BroadcastReceiver後運行時異常
- 13. 運行時異常的AsyncTask
- 14. C#運行時異常
- 15. iOS運行時異常
- 16. 運行時異常Purchase.pay
- 17. JAXWS運行時異常
- 18. AsyncTask運行時異常
- 19. Xamarin Android運行時異常
- 20. 運行時異常代碼
- 21. XMLEncoder - 運行時異常
- 22. Android Studio運行時異常
- 23. java hibernate運行時異常
- 24. AsynckTask運行時異常doInBackground
- 25. 運行時權限異常
- 26. Swift Catch運行時異常
- 27. JSP運行時異常
- 28. 運行時異常產生
- 29. BitmapFactory.decodeByteArray運行時異常
- 30. 獲取運行時異常
那麼,你試過嗎? –
另請參閱[這個答案](http://stackoverflow.com/q/3020757/1076463) – Robin
結果是undeterminate與所有未捕獲的拋出異常.. – kleopatra