2011-11-27 106 views
3

JProgressBar上有很多帖子,但是我找不到针对以下问题的解决方案。如何更新JProgressBarInputStream收到的测量字节?来自InputStream的JProgressBar

例如,我有以下代码:

int bytesRead; 
byte buffer = new byte[1024]; 
ByteArrayOutputStream getBytes = new ByteArrayOutputStream(); 

while ((bytesRead = dis.read(buffer)) != -1) { 
    getBytes.write(buffer, 0, bytesRead); 
} 

return(getBytes.toByteArray()); 
+0

你从哪里读取你的数据(文件,HTTP,..)?在某些情况下,使用的InputStream实例实现** available()**方法。 – Robert

+0

我正在通过HTTP读取数据。如果返回可用于读取的实际字节数,则available()方法对测量是有利的,但据我所知,它不会那样做。 – jadrijan

回答

1

如果你知道你的物流中的总数据量,那么你可以做到以下几点:

int nBytesReceived = 0; 
int nTotalBytesInStream = ... // Total data size 
progressBar.setMaximum(100) ; 
progressBar.setMinimum(0) ; 
while ((bytesRead = dis.read(buffer)) != -1) { 
    getBytes.write(buffer, 0, bytesRead); 
    nBytesReceived += bytesRead; 
    progressBar.setValue(nBytesReceived*100/nTotalBytesInStream); 
} 

确保nTotalBytesInStream0

这个SO question可能会帮你找出inputStream的大小

1

如果您知道要读取的字节数,可以将其设置为最大值,并按照循环的每次迭代读取的字节数增加进度条。

如果您不知道您将读取多少字节,请将进度栏设置为indeterminate mode,并且它会自动进行动画显示正在发生“某些”进度。