Индикатор выполнения отображается только в режиме отладки. Job плюс асинхронный дисплей - PullRequest
0 голосов
/ 30 января 2012
 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();

Когда я запускаю приложение в режиме отладки, индикатор выполнения отображается правильно, и все компоненты пользовательского интерфейса ожидают задания.Но в режиме релиза компоненты пользовательского интерфейса все еще ждут задания, а индикатор выполнения не отражает.

В чем причина?

1 Ответ

2 голосов
/ 31 января 2012

Вам не нужно запускать 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);
    }
});
...