2015-04-05 65 views
1

我使用asyncExec()在run()方法中更新了我的eclipse rcp應用程序的gui。如何在eclipse rcp中顯示作業的進度?

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如何工作?我也有問題,我無法取消或退出進度對話框(取消按鈕和退出按鈕不顯示任何效果)。

回答

0

Job這樣不適合傳遞進度服務。

你應該打電話job.schedule()並讓它運行。如果您在調度作業之前調用

job.setUser(true); 

它會在幾秒鐘後顯示自己的進度對話框。

您的工作應定期致電monitor.worked(1)更新進度監視器。該工作應致電monitor.isCanceled()檢查取消按鈕。

如果你的工作主要是做GUI工作,那麼使用UIJob在UI線程中運行整個工作(但這更可能會減慢用戶界面的速度)。

+0

啊我也嘗試過,太抱歉了,但取消按鈕仍然不起作用。我調用monitor.isCanceled()來檢查它,但沒有任何反應。 monitor.beginTask(「」,IProgressMonitor.UNKNOWN); (monitor.isCanceled()){System.out.println(「hello」);}} } – Haxathon 2015-04-05 21:29:46

+0

您必須隨着工作進度繼續檢查isCanceled – 2015-04-06 06:47:34

相關問題