我想在Eclipse中运行一个特定作业(我没有设计或编写)的监听器。 我知道我可以使用Job Manager访问Job.getJobManager。在IJobManager里面有方法find,但它需要一个家庭对象。
Eclipse FAQ也假设你知道家庭对象。如何找到给定作业管理器中使用的当前系列对象列表?
或者我是唯一选择注册JobChangeListener并过滤掉我感兴趣的工作的选项?
答案 0 :(得分: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);
}
});