我在作业的 run() 方法中使用 asyncExec() 更新了 eclipse rcp 应用程序的 GUI。
Job job = new Job("The Job") {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
monitor.beginTask("", IProgressMonitor.UNKNOWN);
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
\\update gui
}
});
...
PlatformUI.getWorkbench().getProgressService().showInDialog(Display.getCurrent().getActiveShell(), job);
job.schedule();
我试图向用户显示进度监视器和 showInDialog 方法需要多长时间的一些指示,但我也希望在对话框出现之前的最初几分钟内有一个繁忙的光标。在这种情况下,BusyIndicator 是如何工作的?我还遇到无法取消或退出进度对话框的问题(取消按钮和退出按钮不显示任何效果)。
最佳答案
Job
不适合像这样传递给进度服务。
您应该只调用 job.schedule()
并让它运行。如果你打电话
job.setUser(true);
在安排作业之前,它将在几秒钟后显示自己的进度对话框。
您的作业应定期调用 monitor.worked(1)
来更新进度监视器。该作业应调用 monitor.isCanceled()
来检查取消按钮。
如果您的工作主要是执行 GUI 工作,则使用 UIJob
在 UI 线程中运行整个作业(但这更有可能减慢 UI 速度)。
关于java - 如何在 eclipse rcp 中显示作业进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461977/