gpt4 book ai didi

java - IProgressMonitor .worked(int) 不更新进度条

转载 作者:行者123 更新时间:2023-11-30 09:21:11 25 4
gpt4 key购买 nike

我正在为 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 方法委托(delegate)给其他方法。

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 委托(delegate)给的方法之一的示例:

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);
}

最佳答案

如果在 UI Thread 中调用 run(),则必须将 fork 设置为 true。 (也就是说,可运行实例不应在 UI 线程中运行。)

UI 线程处理 UI 事件,如更新进度条、重绘等。但是如果你在 UI 线程中运行一个耗时的任务,线程就不能处理事件,因为它很忙。 (任务完成后会处理事件)

关于java - IProgressMonitor .worked(int) 不更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com