【问题标题】:Calculate a percentage progression based on events根据事件计算百分比进展
【发布时间】:2012-01-18 09:50:19
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 所以你基本上什么都不知道,想得到进度百分比。你真的了解进度条的使用吗?这意味着您已经知道一些事情
  • 也许用一些数学公式可以表示进度,我知道这并不简单,但如果这很简单,我就不会在 StackOverflow 上问了...... :)
  • 你不能。如果你有 10 个事件呢?如果你有 12 个事件呢?要使用进度条,您需要一个确定的数字,而不是任意数字。
  • 请记住,我不想要进展的确切值,而只想要一个近似值,如启发式确定......
  • 如果您的事件不超过 50 个,则将最大值设置为 50,并且对于每个完成的事件,进度将为 numberEventsDone/50。但是你最后的事件会填满进度条的大部分。尽管如此,它仍然提供了一个关于进步的想法

标签: java math progress jprogressbar


【解决方案1】:

可能你能做的最好的事情就是完全放弃实际进度条的想法,而改用一些不确定的进度指示器。在这种情况下,桌面系统上通常会使用“字幕”或“弹跳”进度条。

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

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

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

  • 避免大跳跃。即使您需要快速赶上,如前一点所述,请逐渐并随着时间的推移进行。举一个具体的例子:与其每次增加 10%,然后静止 10 秒,不如在 10 秒内增加 10 次,每次增加 1%。

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

【讨论】:

    【解决方案2】:

    正常的进度条无法满足您的要求,因为您基本上不知道要追踪的进度。您可以做的是有一个选框进度条(一个无限期地继续运行的进度条)向用户显示您的应用程序仍在运行,并且高于或低于它,有一个不可编辑的文本框,用于显示您上面提到的任务.

    【讨论】:

    • 所以你是说如果你不知道任务总数就不可能计算进度百分比?
    • @aleroot 我的看法是的......就像你想做一些像 100/x = 一些具体的价值和 x 不知道......我不认为那可以做完了。您可以做的也许是想出某种最坏的情况,其中任务数量不能更高,而您总是那样做。因此,如果在最坏的情况下任务数量为 8,并且您确定它永远不会超过 8,则可以使用该值来跟踪整体进度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多