0

totalWorkを変更してProgressMonitorを作成しようとしています。2つのステップがあると仮定しましょう。最初のステップは、オブジェクトのリストを取得することです。totalWork = -1(不明)。

2番目のステップでは、lislからすべてのオブジェクトを変更します。そこで、totalWorkをリストのサイズに変更したいと思います。以下のコードのようなものを試しましたが、機能しませんでした:

int totalWork = -1
monitor.beginTask("Task", totalWork);
monitor.subTask("Start Subtask 1");
final List<Object> list = retrieveList();
totalWork = list.size();
monitor.subTask("Retrieve Events");
for(Object obj:list){
   //do some job
   monitor.worked(1)
}
monitor.done()

それを達成する方法はありますか?

編集:私はジョブを拡張していて、上記のコードはrunメソッドにあります。

4

2 に答える 2

1

私は自分の問題の解決策を見つけました。

int totalWork = -1
monitor.beginTask("Task 1", totalWork);
monitor.subTask("Start Subtask 1");
final List<Object> list = retrieveList();
totalWork = list.size();
monitor.beginTask("Retrieve Events",totalWork);
for(Object obj:list){
   //do some job
   monitor.worked(1)
}
monitor.done()
于 2012-06-12T08:21:08.770 に答える
0

簡単な答え:いいえ!

長い答え:

最初のステップにかかる時間が100ミリ秒未満の場合(非常に大きなデータセットの場合でも)、これは通常、beginTask...の前に実行されます。

多くの場合、初期カウント操作には、実際の操作に非常に匹敵する時間がかかります。この場合、埋め込みを使用できますSubProgressMonitor。初期カウントが後の操作の1/20を取るとしましょう:

public void run(IProgressMonitor monitor) {
    monitor.beginTask("Task", 1+20);
    try {
        monitor.subTask("Initializing");
        final List<Object> list = retrieveList();
        monitor.worked(1);

        IProgressMonitor sub = new SubProgressMonitor(monitor, 20);
        sub.beginTask("", list.size());
        for (Object o : list) {
            sub.subTask(""+o);
            // ...
            sub.worked(1);
        }
        sub.done();
    } finally {
        monitor.done();
    }
}
于 2012-06-12T06:05:02.177 に答える