JProgressBar от InputStream - PullRequest
       20

JProgressBar от InputStream

3 голосов
/ 27 ноября 2011

На 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());

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Если вы знаете, сколько байтов вы будете читать, вы можете установить это значение как максимальное и увеличить индикатор выполнения на количество байтов, прочитанных для каждой итерации цикла.

Если вы этого не сделаетезнать, сколько байтов вы прочтете, установите индикатор выполнения на режим неопределенности , и он будет анимироваться, показывая, что происходит "некоторый" прогресс.

1 голос
/ 27 ноября 2011

Если вам известен общий объем данных в потоке, вы можете сделать следующее:

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

Этот ТАК * вопрос может помочь вам определить размер inputStream

...