2014-02-25 44 views
1

方法org.eclipse.core.runtime.IProgressMonitor.worked(int)接收整數,這意味着增量。這意味着,唯一可用的單位是自然單位。例如,它不能是百分數。如何在Eclipse插件中的IProgressMonitor中精確設置工作?

因此,如果我在作業中處理某些文件,我無法報告計數階段,因爲我應該調用的第一種方法是org.eclipse.core.runtime.IProgressMonitor.beginTask(String, int),這需要我知道總量。

如何完成?

UPDATE

我寫了下面的包裝,但是這看起來荒謬一個需要這樣做:

public class ProgressMonitorDoubleWrapper implements IProgressMonitor { 

    private IProgressMonitor delegate; 
    private int currentWork, totalWork; 
    private double currentWorkDouble; 

    public ProgressMonitorDoubleWrapper(IProgressMonitor monitor) { 
     this.delegate = monitor; 
    } 

    @Override 
    public void beginTask(String name, int totalWork) { 
     beginTask(name, (double) totalWork); 
    } 

    public void beginTask(String name, double totalWork) { 
     this.totalWork = (int) totalWork; 
     currentWork = 0; 
     currentWorkDouble = 0; 
     delegate.beginTask(name, this.totalWork); 
    } 

    @Override 
    public void done() { 
     delegate.done(); 
    } 

    @Override 
    public void internalWorked(double work) { 
     delegate.internalWorked(work); 
    } 

    @Override 
    public boolean isCanceled() { 
     return delegate.isCanceled(); 
    } 

    @Override 
    public void setCanceled(boolean value) { 
     delegate.setCanceled(value); 
    } 

    @Override 
    public void setTaskName(String name) { 
     delegate.setTaskName(name); 
    } 

    @Override 
    public void subTask(String name) { 
     delegate.subTask(name); 
    } 

    @Override 
    public void worked(int work) { 
     worked((double)work); 
    } 

    public void worked(double work) { 
     currentWorkDouble += work; 
     int increment = (int)(currentWorkDouble - (double)currentWork); 
     currentWork += increment; 
     delegate.worked(increment); 
    } 

} 

回答

1

我還沒有看到這方面的一個很好的解決方案,你可以做一個什麼如下:

如果可能的話,做一些快速掃描來計算總數。

您可以指定IProgressMonitor.UNKNOWN作爲beginTask上的值,這會給您一個不同的進度條,它只是顯示正在發生的事情。

只是猜測值!可能有些東西比總工作價值更大。

如果工作能以幾件被分割使用SubProgressMonitor,每件並指定每個部分在合理的工作計數:

monitor.beginTask("task", 2 * 1000); 

work1(new SubProgressMonitor(monitor, 1000)); 

work2(new SubProgressMonitor(monitor, 1000)); 
+0

感謝。在Eclipse 4中它更好嗎? – Dims

+0

Eclipse 4沒有變化 –

相關問題