Как измерить ход выполнения задачи и обновить его с помощью JProgressBar

Я хочу отображать процент выполнения задачи. Но поскольку длина задачи зависит от количества данных, которые нужно прочитать из файла, я не могу жестко запрограммировать значение для pb3.setValue(...), как я делаю это сейчас. Я знаю, что могу использовать setIntermediate(true), чтобы показать, что задача выполняется, но есть ли способ определить точный ход выполнения задачи на основе размера файла.

Это операция, которую я пытаюсь измерить, где 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());

    }

Заранее спасибо за любую помощь или предложения.


person PLG    schedule 12.10.2013    source источник
comment
Можно заранее определить количество строк, но тогда придется читать файл дважды. Или вы можете проверить размер файла и обновить прогресс в зависимости от количества уже обработанных байтов.   -  person qqilihq    schedule 13.10.2013


Ответы (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();
person Saint    schedule 14.10.2013