我试图开发一个插件,它可以在计划任何类型的eclipse作业时做一些工作。Eclipse所有作业监听器
基本上我希望能够知道任务在进度对话框中并监视它。
有没有可以设置的听众来捕捉这些工作的乞讨和结束?
我试图开发一个插件,它可以在计划任何类型的eclipse作业时做一些工作。Eclipse所有作业监听器
基本上我希望能够知道任务在进度对话框中并监视它。
有没有可以设置的听众来捕捉这些工作的乞讨和结束?
当你考虑它时,ProgressView
就是这样做的:每当一个Job开始时,它就会在它的视图中显示它。
注意,因为在这个线程提到的,ProgressView
is tightly coupled with the eclipse Jobs API(即,它可以不监视任何普通的香草线程)
(从文章On the Job: The Eclipse Jobs API)
那么可能是你可以通过启动看着org.eclipse.ui.internal.progress.ProgressView
的代码,这需要一个ProgressViewerContentProvider
的基础上,ProgressContentProvider
(实施IProgressUpdateCollector
)
的所有事情似乎是基于ProgressViewUpdater
单,其负责监测这些工作的创建一个UI线程:
/**
* Create the update job that handles the updatesInfo.
*/
private void createUpdateJob() {
updateJob = new WorkbenchJob(ProgressMessages.ProgressContentProvider_UpdateProgressJob) {
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
*/
public IStatus runInUIThread(IProgressMonitor monitor) {
//Abort the job if there isn't anything
if (collectors.length == 0) {
return Status.CANCEL_STATUS;
}
if (currentInfo.updateAll) {
synchronized (updateLock) {
currentInfo.reset();
}
for (int i = 0; i < collectors.length; i++) {
collectors[i].refresh();
}
} else {
//Lock while getting local copies of the caches.
Object[] updateItems;
Object[] additionItems;
Object[] deletionItems;
synchronized (updateLock) {
currentInfo.processForUpdate();
updateItems = currentInfo.refreshes.toArray();
additionItems = currentInfo.additions.toArray();
deletionItems = currentInfo.deletions.toArray();
currentInfo.reset();
}
for (int v = 0; v < collectors.length; v++) {
IProgressUpdateCollector collector = collectors[v];
if (updateItems.length > 0) {
collector.refresh(updateItems);
}
if (additionItems.length > 0) {
collector.add(additionItems);
}
if (deletionItems.length > 0) {
collector.remove(deletionItems);
}
}
}
return Status.OK_STATUS;
}
};
updateJob.setSystem(true);
updateJob.setPriority(Job.DECORATE);
updateJob.setProperty(ProgressManagerUtil.INFRASTRUCTURE_PROPERTY, new Object());
}
你可以听JobChangeListener
在IJobManager
用于作业的开头和结尾。
IJobManager manager = Job.getJobManager();
manager.addJobChangeListener(myJobChangeListener);
IJobChangeListener
收到以下事件。
public void aboutToRun(IJobChangeEvent event);
public void awake(IJobChangeEvent event);
public void done(IJobChangeEvent event);
public void running(IJobChangeEvent event);
public void scheduled(IJobChangeEvent event);
public void sleeping(IJobChangeEvent event);
但是,我还没有找到一种方法来跟踪正在运行的作业的进度。如果有人,我会很好奇。 VonC。
伟大的答案,VonC。 :竖起大拇指: – pimpf0r 2009-11-19 12:19:38
谢谢,明天我会试试看。 – Valadas 2009-11-20 00:08:51