进度条仅在调试模式下显示。作业加异步显示

时间:2012-01-30 12:34:35

标签: java swt eclipse-rcp

 Job job = new Job("Initialize Info ") 
 {

     @Override
     protected IStatus run(IProgressMonitor monitor) {
     //some action in job thread

         Display.getDefault().asyncExec(new Runnable() {

             @Override
             public void run() {
                 //
                 //different actions with UI components.
             }
         });
      return Status.OK_STATUS;
      }
  };
  job.schedule();

当我在调试模式下运行应用程序时,会正确显示进度条并且所有UI组件都在等待作业。但是在发布模式下,UI组件仍然在等待工作,但进度条并没有反映出来。

是什么原因?

1 个答案:

答案 0 :(得分:1)

您无需运行asycExec。尝试使用UIJob
The UIJob is a Job that runs within the UI Thread via an asyncExec.
像这样:

Job job = new Job("") {

    @Override
    protected IStatus run(IProgressMonitor monitor) {
        monitor.beginTask("Task..." -1);
        // do what i need to do (and doesn't bother my UI)
        return Status.OK_STATUS;
    }
};

job.setUser(true);
job.schedule();
job.addJobChangeListener(new JobChangeAdapter() {
    @Override
    public void done(IJobChangeEvent event) {
        new UIJob("") {

            @Override
            public IStatus runInUIThread(IProgressMonitor monitor) {
                // Update my UI
                monitor.beginTask("UI Task..." -1);
                return Status.OK_STATUS;
            }
        }.schedule();
        super.done(event);
    }
});