根据事件计算百分比进度

时间:2012-01-18 09:50:19

标签: java math progress jprogressbar

我必须实现一个显示报告生成进度的进度条,问题是我必须根据代生成的事件来表示报告进度的百分比,但事先不知道事件的总量,所以例如,报告生成发送以下事件(阶段):

 - Starting Report generation
 - Start Query execution
 - End Query execution
 - Start Report Rendering
 - End Report Rendering
 - End Report Generation

在这个例子中总共有3个任务和6个事件,我不知道任务的总数,但我知道事件的总数是任务的两倍。

我不知道哪些事件存在以及它们有多少,但我必须用进度条表示进度,所以数字介于0和100之间。

如何计算?什么是表示进展的最佳方式?

2 个答案:

答案 0 :(得分:3)

你可以做的最好的事情就是完全放弃实际进度条的想法,而是起诉一些不确定的进度指标。在此方案中,桌面系统通常使用“选取框”或“弹跳”进度条。

另一种选择 - 如果你真的想展示一些类似进步的东西 - 是采用一些启发式方法并且只是(部分地)伪造它。你在这里没有太多的信息,所以它必须非常聪明,并且需要对真实案例进行大量测试。以下是一些建议:

  • 根据当前处理任务的嵌套级别增加进度。基本上,这个想法是任务越精细,它对整体进展的贡献就越小。通过任务嵌套,我的意思是,当您将StartEnd消息括起来时隐含的层次结构。

  • 合理估算您可以预期的最大任务数,并根据您完成的距离调整进度的速度。例如,如果您预计任务不超过500个,并且您已经处理了300个但已经显示80%的进度,则必须严重减慢任何进一步的增长。同样,如果你落后,你应该适当扩大你的进度增量。

  • 避免大跳跃。即使您需要快速赶上,如前所述,也要逐渐地逐步进行。举一个具体的例子:不是一次增加10%然后静止10秒,而是在10秒内每次增加10%的增量。

您可以尝试使用更多技术。总的来说,这是一个非常有趣的UX和数学相关的问题,但你应该考虑是否花费认知努力值得麻烦。我希望在大多数情况下,不确定的进展绝对没问题。

答案 1 :(得分:1)

正常进度条无法满足您的要求,因为您基本上不了解您要跟踪的进度。你可以做的是有一个选取框进度条(一个可以无限期进行的进度条)向用户显示你的应用程序仍然在上面或下面,有一个不可编辑的文本框,显示你上面提到的任务