关于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
例子:
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
http://help.eclipse.org/help30/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/runtime_jobs.htm
如果是在非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)
