SwingWorker增强异常处理

开发 后端
本文介绍SwingWorker增强异常处理,要获得construct()方法实际上抛出的异常,可以调用getTargetException()进行异常处理。

新的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()方法。后台线程可以用这些方法来在事件派发线程中获取值和用户输入,再把结果返回到后台线程。

【编辑推荐】

  1. 介绍JavaFX功能与Swing的关系
  2. 浅谈Swing中lookandfeel源代码
  3. 概述Swing中的Timer对象
  4. 浅析Swing中actionPerformed()方法
  5. 详解所有的Swing核心组件
责任编辑:佚名 来源: cnblogs
相关推荐

2010-05-10 09:21:46

2009-07-17 17:47:39

SwingWorker

2009-07-10 09:30:41

SwingWorker

2009-07-17 10:58:12

SwingWorker

2009-07-17 17:41:41

SwingWorker

2009-07-17 14:57:41

SwingWorkerSwing程序

2009-07-10 09:05:20

SwingWorker

2023-12-11 14:19:00

Java程序异常

2012-12-21 10:48:20

Java异常

2013-08-22 17:10:09

.Net异常处理

2012-11-12 10:32:48

IBMdw

2018-07-11 19:41:47

MySQL定义异常异常处理

2022-12-28 08:17:19

异常处理code

2018-08-20 16:25:48

编程语言Java异常处理

2010-02-22 13:35:03

WCF异常处理

2011-03-17 09:20:05

异常处理机制

2009-09-14 14:17:11

Linq异常处理

2009-02-25 10:34:57

异常处理体系Python

2023-12-27 07:53:08

全局异常处理处理应用

2023-07-10 08:00:13

架构Rest返回值
点赞
收藏

51CTO技术栈公众号