浅谈SwingWorker的使用
创始人
2024-04-17 04:11:37
0

JDK1.6以后,Swing提供了一个专门的类SwingWorker能帮你解决这个编程范式,你所需要做的就是继承这个类,重载doInBackground,然后在actionPeformed中调用它的execute方法,并通过publish/process方法来更新界面。

SwingWorker实际上不过是封装了前面我所说的例子中的MyQueryTask,并做了更详尽的考虑。execute方法相当于MyQueryTask线程start,它启动这个后台线程并立刻返回。SwingWorker 可以注册PropertyChangeListener,这些listener都被在事件调度线程上执行,相当于MyQueryTask中的那些访问组件的Runnable对象。另外,publish、setProgress只不过是特殊的property事件吧,process和done不过是响应 publish和PropertyChangeEvent.DONE这个事件的方法罢了。因此我们很容易将上面的例子改成SwingWorker的版本:

  1. voidmyButton_actionPerformed(ActionEventevt){  
  2. newMyQueryTask().execute();  
  3. }  
  4.  
  5. publicclassMyQueryTaskextendsSwingWorker{  
  6. publicvoiddoInBackground(){  
  7. //查询数据库  
  8. finalResultSetresult=...;  
  9. //显示记录  
  10. for(;result.next();){  
  11. //往表的Model中添加一行数据,并更新进度条,注意这都是访问组件  
  12. publish(result);  
  13. }  
  14. ....  
  15. }  
  16. publicvoidprocess(Object...result){  
  17. //往表格中添加数据  
  18. jTable.add....  
  19. //更新进度条  
  20. jProgress.setValue(....);  
  21. }  

对于一般的耗时任务这样做是比较普遍的,但是有一些任务是一旦触发之后,会周期性的触发,如何做处理这种任务呢?JDK中提供了两个Timer类帮你完成定时任务,一个是javax.swing.Timer,一个java.util.Timer。使用它们的方法很简单,对于Swing的timer,使用方法如下:

  1. publicvoidmyActionPerformed(){  
  2. //假设点击了某个按钮开始记时  
  3. ActionmyAction=newAbstractAction(){  
  4. publicvoidactionPerformed(ActionEvente){  
  5. //做周期性的活动,比如显示当前时间  
  6. Datedate=newDate();  
  7. jMyDate.setDate(date);//jMyDate是个假想的组件,能显示日期时间  
  8. }  
  9. };  
  10. newTimer(1000,myAction).start();  

java.util.Timer类似,只不过使用TimerTask完成动作封装。注意这两个Timer有一个关键的区别:Swing的Timer的事件处理都是在事件调度线程上进行的,因而它里面的操作可以直接访问Swing组件。而java.util.Timer则可能在其他线程上,因而访问组件时要使用SwingUtilities.invokeLater和invokeAndWait来进行。这一点要记住。

如果要了解更详细的信息,可以查阅SwingWorker、Swing Timer和util Timer这些类javadoc文档和其他网上资料。最重要的是要记住了那两条原则。

【编辑推荐】

  1. 概述Swing窗体的种类
  2. 浅谈Swing线程三种
  3. Swing全屏幕模式
  4. 浅析Swing线程中的LookupEvent
  5. Swing文件选择器的制作

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...