我正在尝试不断检查进度监视器是否有在后台运行的操作。
为此,我使用了Job.getJobManager.IsIdle()
。
我尝试了以下内容:
WorkspaceJob job = new WorkspaceJob("Hello")
{
@Override
public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException
{
while(!Job.getJobManager().isIdle())
{
System.out.println(!Job.getJobManager().isIdle());
}
return Status.OK_STATUS;
}
};
job.setPriority(Job.SHORT);
job.schedule();
但这不起作用,因为Job.getJobManager.isIdle
永远不会返回false,因为Job 'Hello'
正在运行。
将其置于异步线程中。
new Thread(new Runnable()
{
@Override
public void run()
{
Display.getDefault().asyncExec(new Runnable()
{
@Override
public void run()
{
while(!Job.getJobManager().isIdle())
{
System.out.println("hi");
}
}
});
}
}).start();
但这不起作用,因为这会冻结主Eclipse GUI,阻止其他进程(如果有任何进程)完成。
如果有人有关于如何做的建议或任何意见,那就太棒了!
答案 0 :(得分:1)
您可以使用作业更改侦听器IJobChangeListener
来侦听作业状态的所有更改。您可以在侦听器中的适当位置测试空闲。 不尝试循环调用isIdle
。
您可以使用JobChangeAdapter
类提供IJobChangeListener
方法的默认实现,这样您只需要覆盖您感兴趣的事件,可能只是done
方法:< / p>
Job.getJobManager().addJobChangeListener(new JobChangeAdapter()
{
@Override
public void done(IJobChangeEvent event)
{
if (Job.getJobManager().isIdle() {
// Manager is idle
}
}
});