有没有办法让 Eclipse 中的特定插件启动所有作业?
Is there a way to get all the jobs started by the particular plugin in eclipse?
有没有办法让eclipse中的特定插件启动所有作业?
这里我们运行 eclipse是命令行模式。我们在插件中开始了一些工作。在某些情况下,插件甚至在作业完成之前就终止了。已决定等待 Activator.stop() 中特定插件启动的所有作业。我想知道是否有可能通过特定插件启动所有作业。
覆盖作业 class 像这样。
public class MyPluginJob extends Job
{
private String jobFamily;
public MyPluginJob(String name, String jobFamily)
{
super(name);
this.jobFamily = jobFamily;
}
@Override
public boolean belongsTo(Object family)
{
return this.jobFamily.equals(family);
}
}
而且,您将以姓氏开始工作
Job job = new MyPluginJob("Update info", "Your_plugin_job_family_name")
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
//do whatever you want
return Status.OK_STATUS;
}
};
job.schedule();
现在,通过执行此调用获取所有插件作业
这将 return 插件拥有的所有作业
Job[] allJobs =Job.getJobManager().find("Your_plugin_job_family_name");
希望对您有所帮助。
您可以等待特定工作系列中的工作完成使用:
Job.getJobManager().join(jobFamily, progressMonitor);
通过指定工作的家庭来创建工作,如下所示:
//create constant job family
final static String MY_JOB_FAMILY = "myPluginJob";
//Create Job
Job job = new Job("Job name") {
@Override
protected IStatus run(IProgressMonitor monitor) {
//perform the task
}
@Override
public boolean belongsTo(Object family) {
return family.equals(MY_JOB_FAMILY);
};
}
job.schedule();
在 Activator.stop() 调用 waitForJob(MY_JOB_FAMILY)
@Override
public void stop(BundleContext context) throws Exception {
waitForJob(MY_JOB_FAMILY);
//Do other shut down activities
}
public void waitForJob(String jobFamily) {
IJobManager jobManager = Job.getJobManager();
Job[] jobs = jobManager.find(jobFamily);
//Wait for all jobs belongs to family 'jobFamily'
while(jobs.length > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//Do nothing.
}
jobs = jobManager.find(jobFamily);
}
}
希望这会有所帮助。
有没有办法让eclipse中的特定插件启动所有作业? 这里我们运行 eclipse是命令行模式。我们在插件中开始了一些工作。在某些情况下,插件甚至在作业完成之前就终止了。已决定等待 Activator.stop() 中特定插件启动的所有作业。我想知道是否有可能通过特定插件启动所有作业。
覆盖作业 class 像这样。
public class MyPluginJob extends Job
{
private String jobFamily;
public MyPluginJob(String name, String jobFamily)
{
super(name);
this.jobFamily = jobFamily;
}
@Override
public boolean belongsTo(Object family)
{
return this.jobFamily.equals(family);
}
}
而且,您将以姓氏开始工作
Job job = new MyPluginJob("Update info", "Your_plugin_job_family_name")
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
//do whatever you want
return Status.OK_STATUS;
}
};
job.schedule();
现在,通过执行此调用获取所有插件作业
这将 return 插件拥有的所有作业
Job[] allJobs =Job.getJobManager().find("Your_plugin_job_family_name");
希望对您有所帮助。
您可以等待特定工作系列中的工作完成使用:
Job.getJobManager().join(jobFamily, progressMonitor);
通过指定工作的家庭来创建工作,如下所示:
//create constant job family
final static String MY_JOB_FAMILY = "myPluginJob";
//Create Job
Job job = new Job("Job name") {
@Override
protected IStatus run(IProgressMonitor monitor) {
//perform the task
}
@Override
public boolean belongsTo(Object family) {
return family.equals(MY_JOB_FAMILY);
};
}
job.schedule();
在 Activator.stop() 调用 waitForJob(MY_JOB_FAMILY)
@Override
public void stop(BundleContext context) throws Exception {
waitForJob(MY_JOB_FAMILY);
//Do other shut down activities
}
public void waitForJob(String jobFamily) {
IJobManager jobManager = Job.getJobManager();
Job[] jobs = jobManager.find(jobFamily);
//Wait for all jobs belongs to family 'jobFamily'
while(jobs.length > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//Do nothing.
}
jobs = jobManager.find(jobFamily);
}
}
希望这会有所帮助。