快速业务通道

关于Eclipse中UI程序的线程的讨论 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
Eclipse中UI程序的线程的讨论(3) 时间:2011-09-09

monitor是一个进度显示条,它会在运行job时自动显示,如果任务成功运行完成,返回Status.OK_STATUS,如果中途被用户在进度显示条那里中断,就返回Status.CANCEL_STATUS.上面schedule(60000);它是让job每过1小时就自动运行,Job又一个非常强大的功能。然后后面是可以给job添加监听器,

job.setSystem(true);这一句是把这个job设置为系统级别的.如果调用setUser(true),那么就被定义为用户级别的,用户级别和默认级别的job。

在运行时会以UI形式反映出来,如果是用户job,那么会弹出一个进度显示窗口,能让用户选择在后台里运行,下图是一个job自动运行时的效果:

关于Eclipse中UI程序的线程的讨论 - 编程入门网

再介绍job常常用到的一个方法Job#join(),系统调用到某个job,调用它的run()方法。再看下面这个例子:

  class TrivialJob extends Job {    public TrivialJob() {      super("Trivial Job");    }    public IStatus run(IProgressMonitor monitor) {      System.out.println("This is a job");      return Status.OK_STATUS;    }   }

job的创建和计划如下所示:

  TrivialJob job = new TrivialJob();   System.out.println("About to schedule a job");   job.schedule();   System.out.println("Finished scheduling a job");

他们的执行是和时间没关系的,输出可能如下:

  About to schedule a job   This is a job   Finished scheduling a job

也可能是:

  About to schedule a job   Finished scheduling a job   This is a job

关于Eclipse中UI程序的线程的讨论(4)

时间:2011-09-09

如果希望某个job运行完成后在继续时,可以使用join()方法,join()会一直阻塞到该job运行完。

例子:

  TrivialJob job = new TrivialJob();   System.out.println("About to schedule a job");   job.schedule();   job.join();   if (job.getResult().isOk())    System.out.println("Job completed with success");   else    System.out.println("Job did not complete successfully");

上面的代码执行后,输出应该就是这样:

 About to schedule a job   This is a job   Job completed with success

Job的功能是很强大的,还有很多功能我以后会介绍,也可以查阅官方帮助文档,这里先把几个常用的问题解决掉。参见:

http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/runtime_jobs.htm

3、如果在Job中加上改变UI的代码就会失败。原因如下:

如果是在非UI线程中调用UI,SWT就会抛出一个SWTException,要在一个非UI线程改变UI的话有几种技术:

第一种,用:

Display#syncExec(Runnable)或

Diaplay#asyncExec(Runnable)

第二种:

已经开发了另外一种Job,就是UIJob,可以直接在它里面运行改变UI的代码,其实它就是在SWT的asyncExec()方法里运行的.所有继承UIJob的类应该覆写runInUIThread方法而不是run方法。

关于Eclipse中UI程序的线程的讨论(5)

时间:2011-09-09

3.关于进度显示

在Jface中:

org.eclipse.jface.operations包定义了一些接口用来在进度条下运行长时间的任务。可以参见:

http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/jface_operations.htm

在eclipse插件和RCP开发中:

用户级别的job是互操作性最强的,它不仅能够让用户用Cancel键取消job,而且可以在Detail中展示具体情况,但是注意:

Detail只会在下面两种方法中出现:

IProgressService#busyCursorW

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号