2015-01-26 1 views
0

응용 프로그램의 로컬 데이터베이스에서 일부 데이터를 검색하고 UI에 일부 데이터를 검색하는 동안 사용자에게 간단한 진행 모니터 대화 상자를 표시하려고합니다.UI가있는 Java SWT ProgressMonitorDialog

현재 UI 스레드에서 Display.getDefault().asyncExec으로 검색을 수행하는 ProgressMonitorDialog를 사용하고 있습니다. 이제 검색은 정말 느립니다. 진행률 대화 상자를 표시하고 데이터베이스에서 검색을 수행하며 성능 손실없이 사용자에게 결과를 표시하는 올바른 스레드 사용은 무엇입니까? 와

class MyJob extends Job 
{ 
    public MyJob() 
    { 
    super("title"); 

    setUser(true); 
    } 

    @Override 
    protected IStatus run(final IProgressMonitor monitor) 
    { 
    ... your code 

    return Status.OK_STATUS; 
    } 
} 

사용 : Eclipse 플러그인 또는 RCP Job를 사용에서 장기 실행 코드에 대한

private void doSearchWithProgressDialog() { 
     ProgressMonitorDialog progressDialog = new ProgressMonitorDialog(null); 

     try { 
      progressDialog.run(true, true, new IRunnableWithProgress() { 

       @Override 
       public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { 
        // display progress monitor dialog while searching 
        monitor.beginTask("Waiting..."), IProgressMonitor.UNKNOWN); 

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

         @Override 
         public void run() { 
          // perform database query 
          doSearchAndDisplayResult(); 
         } 
        }); 

        monitor.done(); 

       } 
      }); 
     } 
     catch (InvocationTargetException e) { 
      log.error(e.getMessage(), e); 
      throw new RuntimeException(e); 
     } 
     catch (InterruptedException e) { 
      log.error(e.getMessage(), e); 
      throw new RuntimeException(e); 
     } 
    } 
+0

이 플러그인은 Eclipse 플러그인의 일부입니까? '직업'이라면 적절할 것입니다. –

+0

Eclipse RCP 응용 프로그램의 일부입니다. –

답변

0

Job myJob = new MyJob(); 
myJob.schedule(); 

setUser(true)에 대한 호출은 작업이 진행 대화 상자가 표시됩니다 의미 몇 초 안에 끝나지 않으면