帮助 | 注册 | 登录

关于Eclipse中UI程序的线程的讨论 (2)
来源:全民业务网 作者:不详

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

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

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
  如果希望某个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)  第二种:
1314.com/zs.js'>  已经开发了另外一种Job,就是UIJob,可以直接在它里面运行改变UI的代码,其实它就是在SWT的asyncExec()方法里运行的.所有继承UIJob的类应该覆写runInUIThread方法而不是run方法。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#busyCursorWhile或
  IProgressService#runInUI
  1)IProgressService#busyCursorWhile的用法例子:
  注意这里的run()中做些和UI无关的事:
IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
   progressService.busyCursorWhile(new IRunnableWithProgress(){
      public void run(IProgressMonitor monitor) {
         //do non-UI work
      }
   });
  效果:   2) IProgressService#runInUI的用法例子:
  注意这里的run()中可以做些和UI有关的事。
progressService.runInUI(
      PlatformUI.getWorkbench().getProgressService(),
      new IRunnableWithProgress() {
         public void run(IProgressMonitor monitor) {
            //do UI work
         }
      },
      Platform.getWorkspace().getRoot());
  效果:


  这里最后一个参数可以是null,或者是这个操作的规则,在这里我们是设定运行这个UI操作时锁定工作台.
  更加具体的可以参见:
http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/workbench_jobs.htm  另外,有少数时候,我们不想弹出一个进度条窗口,而是只在最底下的状态栏显示就可以了,很简单,写自己的Job类时,在构造方法里加上一句:
setUser(false);就可以了。
(e129)

  

  • 上一篇:关于Eclipse中UI程序的线程的讨论 (1)
  • 下一篇:Exchange Server2000 分为那几种版本