1

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

Eclipse FAQ还假定您知道家庭对象。如何找到给定作业管理器中使用的当前家庭对象列表?

还是我唯一的选择是注册JobChangeListener并过滤掉我感兴趣的工作?

4

1 回答 1

1

如果您可以为您的作业添加微小的更改,请使用 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);
    }
});
于 2012-10-30T09:25:53.787 回答