如何在eclipse rcp中显示作业的进度?

时间:2015-04-05 20:40:02

标签: java eclipse multithreading rcp progress

我在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方法需要多长时间的指示,但我还希望在对话框出现之前的最初几分钟有一个忙碌的光标。在这种情况下,BusyIndi​​cator如何工作?我还有一个问题,即我无法取消或退出进度对话框(取消按钮和退出按钮不会显示任何效果)。

1 个答案:

答案 0 :(得分:1)

Job不适合传递给这样的进度服务。

您应该致电job.schedule()并让它运行。如果你打电话

job.setUser(true);

在安排作业之前,它会在几秒钟后显示自己的进度对话框。

您的工作应定期致电monitor.worked(1)以更新进度监控器。作业应该调用monitor.isCanceled()来检查取消按钮。

如果你的工作主要是做GUI工作,那么使用UIJob在UI线程中运行整个工作(但这更有可能减慢用户界面)。