2012-04-19 41 views
3

如果我读了一个文件,直到它遇到一个空行,并且想要为阅读完成时创建一个准确的JProgressBar,我该怎么做?如何为未知长度的任务创建精确的进度条?

我问的原因是因为有些文件是在200ms之内读取的,其他文件在2500ms10000ms之间。

我做一些简单的文件进行读取

boolean completed 

while(!completed) { 
    //read file 
    if(reader == null) { 
     completed = false; 
    } 
} 

那么,有没有一种方法,使一个进度条准确的像这样的情况呢? (顺便说一下,文件的大小并不一定意味着在这种情况下读取所需的时间会更少)

+2

如果您无法准确预测任务何时完成,您如何期望在进度条中准确显示该信息? – dasblinkenlight 2012-04-19 16:01:39

+2

这就是为什么进度条有不确定的模式。 – Thomas 2012-04-19 16:03:29

+0

@dasblinkenlight这基本上是我的问题。我只想确认在继续之前没有办法这样做。 @托马斯谢谢你的回应,我可能会诉诸不确定的模式,然后! - 谢谢你们 – WilliamShatner 2012-04-19 16:10:23

回答

6

使用文件的大小 - 这是您最好的衡量标准。

显示的内容必须具有用户可以理解的含义。这是最重要的部分。如果进度条表示已处理文件的百分比,那么这很容易理解,易于量化,并且易于计算和显示。这使得你的进度条透明,这是重要的。

想想这是如何被用户看到的。你不需要编程某种预测智能,因为用户有大脑,他们可以得出自己的结论。所以如果他们看到进度条在上半场跑得快,然后放慢速度,他们就知道它已经处理了一半的文件,但下半场需要更长的时间。这就是他们需要知道的一切!他们可以得出他们自己的结论,即进度条放慢后,完成文件可能需要比上半年所指示的时间更长的时间。

实际上,用户可能已经知道正在处理的文件。对于这个特定的文件,他们可能知道有用的(或长时间处理的)数据全部在下半部分。所以当他们看到进度条放慢速度的时候,这是他们期待的。这为用户提供了所需的透明度,让用户知道该软件的工作方式应该如何,并且他们可以得出他们需要等待多久的结论。

当然,对于显示“3秒内处理文件的25%”的一般估计仍然有用,因此我们估计需要额外的9秒才能完成。这也是一个非常通用的基本方程,它是透明的,所以用户可以知道如何使用它并针对他们正在处理的文件的细节进行调整。

+0

我将无法使用文件大小,但是您在答案中提供了一些非常好的观点。感谢您的好阅读和简化我应该瞄准的目标。 – WilliamShatner 2012-04-19 20:59:52

+0

很高兴帮忙,@CaptainKirk – 2012-04-24 15:05:21