0

プログレスバーについてしばらく読んでいますが、それでも質問に対する答えが見つかりません。多分それは私が気付いていないことです。

http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html

私はJavaで書かれたプログラムを持っています。そこでは、終了するのに必要な時間も計算します。

static long startTime = System.currentTimeMillis();
...
long endTime   = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println(totalTime);

完了したプログラムの割合を使用して、プログレスバーを作成できるかどうかを知りたいです。実行までに必要な時間を計算できるかどうかわからないので、本当に混乱しています。

助けていただければ幸いです。よろしく

4

4 に答える 4

2

進行状況パーには、経過時間のパーセンテージではなく、作業のパーセンテージが表示されます。

したがって、コードで470個のオブジェクト(=最大値)を処理する必要がある場合。オブジェクトが処理されるたびに、progress1ずつインクリメントします。

于 2013-03-26T14:23:23.697 に答える
2

タスクの進行状況を測定する方法が必要です。既知の量のデータを処理していますか?進捗状況を計算して、進捗状況バーを新しい値で定期的に更新できるはずです。たとえば、プログレスバーを0〜100の範囲に設定します。

JProgressBar myProgressBar = new JProgressBar(0, 100);

(新しいスレッドで)データを処理するときに、Swingスレッドのプログレスバーを更新します。

int[] myData = // data to process

for (int ctr = 0; ctr < myData.length; ctr++) {
    doMyProcess(myData[ctr]);
    int percentComplete = (int)Math.round(ctr / (float)myData.length);
    myProgressBar.setValue(percentComplete);
}

何らかの方法で進行状況を測定できない場合は、「不確定」進行状況バーを使用する必要があります。これは、プログラムが何かを実行していることを示しますが、タスクは測定できません。

myProgressBar.setIndeterminate(true);
于 2013-03-26T14:25:05.417 に答える
0

プログラムが終了するのに必要な時間を見積もるのは非常に困難です。しかし、処理しているデータセット(コピーしているファイル、処理しているデータベース行など)に集中して、代わりにそれを測定する必要があるかもしれません。それはおそらくあなたが知っていることであり、それから完了したパーセンテージを計算することができます。有限のデータセットが実際にない場合は、意味のある情報を提供しない進行状況バーをユーザーに表示するのではなく、不確定な進行状況バーを表示する必要があります。

于 2013-03-26T14:23:42.053 に答える
0

この場合に必要なのは不確定ProgrssBarです。これが公式ドキュメントの段落です:

長時間実行されるタスクの長さをすぐに判断できない場合や、タスクが同じ完了状態で長時間スタックしたままになる場合があります。プログレスバーを不確定モードにすると、測定可能な進行状況なしで作業を表示できます。不確定モードのプログレスバーには、作業が行われていることを示すアニメーションが表示されます。プログレスバーに意味のある情報が表示されたらすぐに、デフォルトの確定モードに戻す必要があります。

ProgressBar以下は、不確定モードで使用するスニペットです

public void propertyChange(PropertyChangeEvent evt) {
if (!done) {
    int progress = task.getProgress();
    if (progress == 0) {
        progressBar.setIndeterminate(true);
        taskOutput.append("No progress yet\n");
    } else {
        progressBar.setIndeterminate(false); 
        progressBar.setString(null);
        progressBar.setValue(progress);
        taskOutput.append(String.format(
                "Completed %d%% of task.\n", progress));
    }
}
}

スニペットはここから取得されました。

于 2013-03-26T14:24:57.697 に答える