我有2个方法包含selft作业,例如
protected void method1(){
String name=getName();//return name based on combobox selection
Job job= new Job("first job"){
@Override
protected IStatus run(IProgressMonitor monitor) {
someActions();
}
}
}
protected void method2(){
String name=getName();//return name based on combobox selection
Job job= new Job("second job"){
@Override
protected IStatus run(IProgressMonitor monitor) {
someActions();
}
}
}
method1和method2可以调用seperated.With自己的进度条
我还有一些按钮来调用两种方法
btnUpdate.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event event) {
method1();
method2();
}
}
但是这个结构工作不正确因为来自method2()的作业从早期开始执行然后从method1()完成了作业。此外,如果我将method1()中的作业标记为join,则method2()将不会启动,直到method1()执行,但进度条不显示
如何让它正常工作?)
答案 0 :(得分:2)
通过设置作业规则防止2个作业同时运行:
public class Mutex implements ISchedulingRule {
public boolean contains(ISchedulingRule rule) {
return (rule == this);
}
public boolean isConflicting(ISchedulingRule rule) {
return (rule == this);
}
}// Mutex
public static final ISchedulingRule mutex = new Mutex();
为你的两个工作:
job.setRule(<your mutex instance>);
确保两个作业都使用相同的互斥锁实例!
这应该:
顺便说一句:您没有使用job.schedule()
安排工作,所以实际上他们甚至不应该使用您发布的代码执行...