gpt4 book ai didi

java - 每次工作后更新 IStatusLineManager 中的 IProgressMonitor()

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:10 26 4
gpt4 key购买 nike

我正在尝试使用 IProgressMonitor,但是当我运行代码时,我没有看到任何情况发生。如果我消除 pm.done();我可以看到进度监视器已满,然后停留在那里。有没有办法可以在每次 pm.worked() 调用后刷新 UI,即使我必须暂停当前线程。

public void someMethod(CutomerInfo cInfo) {

IStatusLineManager lm = getViewSite().getActionBars().getStatusLineManager();
IProgressMonitor pm = lm.getProgressMonitor();
pm.beginTask("Doing some work", 100);

populateCustomerInfo();
pm.worked(25);

someOtherFunction();
pm.worked(25);

morefunctions();
pm.worked(25);

this.someValue = someClass.yetAnotherFunction(this.cInfo, this);
pm.worked(25);

pm.done();
}

编辑 1

我将 Job 添加到了我的函数中,现在看起来像下面的代码。我知道作业正在运行,但我没有看到进度条。有没有办法传递我定义为pm的进度监视器?

public void someMethod(CutomerInfo cInfo) {

Job job = new Job("Test Job") {

IStatusLineManager lm = getViewSite().getActionBars().getStatusLineManager();
IProgressMonitor pm = lm.getProgressMonitor();

@Override
protected IStatus run(IProgressMonitor monitor) {
// Set total number of work units
monitor.beginTask("start task", 100);

try {
System.out.println("\nHello World (from a background job)\n");

monitor.subTask("doing a");
populateCustomerInfo();
monitor.worked(25);

monitor.subTask("doing b");
someOtherFunction();
monitor.worked(25);

monitor.subTask("doing c");
morefunctions();
monitor.worked(25);

monitor.subTask("doing d");
yetAnotherFunction();
monitor.worked(25);

monitor.done();
}catch (InterruptedException e1) {
e1.printStackTrace();
}
return Status.OK_STATUS;
}
};

job.schedule();
}

最佳答案

长时间运行的任务必须在后台线程中运行。在 UI 线程中运行它们将阻止 UI 更新。

在这种情况下,您可能想要使用 Eclipse Job。作业的主要 run 方法有一个进度监视器,该监视器将显示在状态行中。

关于java - 每次工作后更新 IStatusLineManager 中的 IProgressMonitor(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37214106/

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