我想为在 Eclipse 中运行的特定作业(我没有设计或编写)添加一个侦听器。我知道我可以使用Job.getJobManager访问Job Manager。在 IJobManager 中有find方法,但它需要一个家庭对象。
Eclipse FAQ还假定您知道家庭对象。如何找到给定作业管理器中使用的当前家庭对象列表?
还是我唯一的选择是注册JobChangeListener并过滤掉我感兴趣的工作?
我想为在 Eclipse 中运行的特定作业(我没有设计或编写)添加一个侦听器。我知道我可以使用Job.getJobManager访问Job Manager。在 IJobManager 中有find方法,但它需要一个家庭对象。
Eclipse FAQ还假定您知道家庭对象。如何找到给定作业管理器中使用的当前家庭对象列表?
还是我唯一的选择是注册JobChangeListener并过滤掉我感兴趣的工作?
如果您可以为您的作业添加微小的更改,请使用 OSGI 事件在它们之间进行通信。假设你有这样的工作:
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);
}
});