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 回答