JProgressBar从InputStream

3

有很多关于JProgressBar的帖子,但是我找不到下面问题的解决方案。如何更新从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());

你从哪里读取数据(文件、HTTP等)?在某些情况下,使用的InputStream实例会实现**available()**方法。 - Robert
我正在通过HTTP读取数据。如果available()方法返回可读取的实际字节数,那么它将是一个很好的测量方法,但据我所知它并没有这样做。 - jadrijan
2个回答

2
如果您知道要读取的字节数,可以将其设置为最大值,并在每次循环迭代时按读取的字节数增加进度条。
如果您不知道要读取多少字节,请将进度条设置为不确定模式,它会自动显示动画,表明正在进行“一些”进度。

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问题 可能会帮助你找出 inputStream 的大小


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接