我一直在阅读关于进度条的一段时间,但我仍然找不到我的问题的答案。也许这是我没有意识到的事情。
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);
我想知道,是否有可能创建一个进度条,其中包含已完成程序的百分比。我真的很困惑,因为我不知道我是否可以计算执行前所需的时间。
我将不胜感激任何帮助。 此致
答案 0 :(得分:2)
进度参数不显示已用时间的百分比,但工作的百分比。
因此,如果您的代码需要处理470个对象(=最大值)。每次处理对象时,将progress
递增1。
答案 1 :(得分: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);
答案 2 :(得分:0)
估计程序完成所需的时间非常困难。但也许你应该专注于你正在处理的数据集(你要复制的文件,你正在处理的数据库行等等)并测量它?这是你可能知道的东西,可以计算完成的百分比。如果你真的没有有限的数据集,那么你可能应该显示一个不确定的进度条,而不是向用户显示一个没有提供任何有意义信息的进度条。
答案 3 :(得分: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));
}
}
}
摘录摘自here。