我正在为 Eclipse 插件(3.7)使用 IProgressMonitor。各种方法调用 .setTaskName(String) 和 .worked(int)。当我运行它时,它正在执行的任务会更新,但进度条上的绿色进度永远不会前进。下面是部分代码:
此处调用 IProgressMonitor.beginTask,然后调用 doFinish 并将监视器传递给它:
public boolean performFinish() {
IRunnableWithProgress op = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException {
try {
monitor.beginTask("Building project...", 10);
doFinish(projectNamePage.getComposite(), new GridLayout(), monitor);
} catch (CoreException e1) {
e1.printStackTrace();
} finally {
monitor.done();
}
}
};
try {
getContainer().run(false, false, op);
} catch (InterruptedException e) {
return false;
} catch (InvocationTargetException e) {
Throwable realException = e.getTargetException();
MessageDialog.openError(getShell(), "Error", realException.getMessage());
e.printStackTrace();
return false;
}
return true;
}
doFinish 方法委托给其他方法。
private void doFinish(Composite container, GridLayout layout, IProgressMonitor pmp) throws CoreException {
//Get the root of the current Eclipse workspace
IWorkspaceRoot iwr = ResourcesPlugin.getWorkspace().getRoot();
//Create a new project with the name requested in SampleNewWizardPage.
IProject project = iwr.getProject(projectNamePage.getFileName().split("\\.")[0]);
IProjectDescription description = null;
project.create(pmp);
project.open(pmp);
description = project.getDescription();
pmp.worked(1);
IJavaProject javaProject = setProjectDescription(description, project, pmp);
setRawClasspathEntryList(pmp, javaProject);
IFolder sourceFolder = buildSourceFolder(project, pmp);
String jarFilePath = downloadAlgoraphJar(javaProject, iwr, pmp);
buildAlgoSettingsFile(javaProject, iwr, pmp);
populateClasspath(sourceFolder, javaProject, jarFilePath, pmp);
buildPackageWithSkeleton(javaProject, sourceFolder, pmp);
}
这是 doFinish 委托给的方法之一的示例:
private void setRawClasspathEntryList(IProgressMonitor pmp, IJavaProject javaProject) {
pmp.setTaskName("Building classpath...");
List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
entries.add(JavaRuntime.getDefaultJREContainerEntry());
try {
javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), pmp);
} catch (JavaModelException e) {
e.printStackTrace();
}
pmp.worked(1);
}