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 が委譲するメソッドの 1 つの例です。
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);
}