2012-10-26 108 views
1

我想将侦听程序添加到在Eclipse中运行的特定作业(我没有设计或编写)。 我知道我可以使用Job.getJobManager访问Job Manager。在IJobManager内部有方法find,但它需要一个家庭对象。收听预定作业

Eclipse FAQ也假设你知道家庭对象。我如何才能找到给定工作经理中使用的家庭对象的当前列表?

或者是我唯一的选择注册JobChangeListener并筛选出我感兴趣的工作?

回答

1

如果您可以对作业添加较小的更改,请使用OSGI事件在它们之间进行通信。 Asume,你有一个这样的工作:

public class SomeJob extends Job { 
    public static final JOB_EVENT_NAME = "some distinct name"; 
    private IEventBroker eventBroker; 
    public SomeJob(IEventBroker eventBroker) { 
     super("SomeJob"); 
     this.eventBroker = eventBroker; 
    } 
    protected IStatus run(IProgressMonitor monitor) { 
     ... 
     eventBroker.post(JOB_EVENT_NAME, some data); 
     ... 
    } 
} 

与之相连的事件监听RCP应用程序启动它(eventBroker是IEventBroker并且可以@ Inject'ed):

new CheckAccessLevelJob(eventBroker).schedule(); 
eventBroker.subscribe(SomeJob.JOB_EVENT_NAME, new EventHandler() { 
    public void handleEvent(Event event) { 
     event.getProperty(IEventBroker.DATA); 
    } 
}); 
+0

可惜我不能碰我需要听的工作。我没有写他们,我没有来源 – stwissel

+1

顺便说一句,大多数工作不使用家庭。因此,您可以使用null系列对象找到它们:Platform.getJobManager()。find(null)。 – Oroboros102