2011-11-27 62 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,並且它會自動進行動畫顯示正在發生「某些」進度。