3

上有很多帖子JProgressBar,但我找不到以下问题的解决方案。如何更新JProgressBar从 接收的测量字节InputStream

例如,我有以下代码:

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());
4

2 回答 2

2

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

如果您不知道要读取多少字节,请将进度条设置为不确定模式,它会自动显示“一些”进度正在发生。

于 2011-11-27T18:37:24.517 回答
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);
}

确保nTotalBytesInStream不是0

这个SO question可能会帮助您弄清楚 inputStream 的大小

于 2011-11-27T18:35:51.197 回答