2013-10-12 2 views
1

완료된 작업의 비율을 표시하고 싶습니다. 그러나 작업의 길이는 파일에서 읽어야하는 데이터의 양에 따라 다르므로 지금 내가하고있는 것처럼 pb3.setValue(...)의 값을 하드 코딩 할 수는 없습니다. setIntermediate(true)을 사용하여 작업이 진행 중임을 표시 할 수 있지만 파일 크기에 따라 정확한 작업 진행률을 결정할 수있는 방법이 있습니다.작업 진행률을 측정하고 JProgressBar를 사용하여 업데이트하는 방법

이것은 측정하려고하는 작업입니다. 여기에서 fileArray[2]텍스트 파일입니다. JFileChooser를 통해 선택합니다.

BufferedReader br3 = new BufferedReader(new FileReader(fileArray[2])); 
String line; 

    while ((line = br3.readLine()) != null) { 

     StringBuffer sb3 = new StringBuffer(br3.readLine()); 
      progress += 1; 
      Thread.sleep(10); 
      pb3.setValue(Math.min(progress, 100)); 
     sb3.reverse(); 
     bwr3.write(sb3.toString()); 
      txt3.append(sb3.toString()); 

    } 

미리 도움을 청하십시오.

+2

당신은 사전에 행의 수를 결정할 수 있지만, 당신은 두 번 파일을 읽을 수 있습니다. 또는 이미 처리 된 바이트의 수에 따라 파일 크기를 확인하고 진행률을 업데이트 할 수 있습니다. – qqilihq

답변

1

이 시도 :

BufferedReader br1 = new BufferedReader(
      new FileReader(fileArray[1])); 

while ((line = br1.readLine()) != null) { 

    StringBuffer sb1 = new StringBuffer(
      br1.readLine()); 
    sb1.reverse(); 
    String lineReversed = sb1.toString(); 

    byte[] bytesRead = lineReversed.getBytes(); 

    for (int i = 0; i < bytesRead.length; i++) { 
     totalBytesRead = totalBytesRead 
       + bytesRead[i]; 
    } 
} 


BufferedReader br1n = new BufferedReader(
     new FileReader(fileArray[1])); 

int totalBytesReadNow = 0; 
int progress = 0; 

while ((line = br1n.readLine()) != null) { 

    StringBuffer sb1n = new StringBuffer(
      br1n.readLine()); 

    sb1n.reverse(); 

    String lineReversed = sb1n.toString(); 

    byte[] bytesReadNow = lineReversed.getBytes(); 

    for (int i = 0; i < bytesReadNow.length; i++) { 
     totalBytesReadNow = totalBytesReadNow 
       + bytesReadNow[i]; 

     if (totalBytesReadNow >= totalBytesRead * 0.01) { 
      progress = progress + 1; 
      totalBytesReadNow = 0; 
     } 

     pb2.setValue(Math.min(progress, 100)); 
    } 

    bwr1.write(lineReversed + "\n"); 
    txt2.append(lineReversed); 
    Thread.sleep(0, 1); 

} 

bwr1.flush(); 
bwr1.close(); 
br1n.close(); 
br1.close(); 
+0

감사합니다. 매력처럼 작동합니다. – PLG

관련 문제