2011-11-27 4 views
3

JProgressBar에 대한 게시물이 많이 있지만 다음 문제에 대한 해결책을 찾을 수 없습니다. JProgressBar 측정 바이트를 InputStream에서 어떻게 업데이트합니까? 당신이 당신의 스트림의 전체 데이터 크기를 알고있는 경우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

(file, 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으로 설정하면 "일부"진행 상황이 발생하고 있음을 나타내는 자체 애니메이션이 생성됩니다.

관련 문제